Sida 2 av 2
Re: NEXA mottagare
Postat: 21 oktober 2009, 22:44:14
av danielr112
Jag som kör med MikroC
Härligt att få titta på. Blir nog att inhandla sådant itll helgen iallfall. Fasen de kliar i fingrarna.
Re: NEXA mottagare
Postat: 21 oktober 2009, 23:19:32
av lond
Det var roligt att ni tyckte om min kod, även om det är skriven i fel språk
Det som är viktigast att justera i koden är värdera som bestämmer tiderna för att trigga pulserna från mottagaren beroende vilken frekvens man har på kristallen. Jag har använt en 16MHz kristall med drivare bara för att jag har sådana liggande

.
Jag har finjusterat värdera genom att koppla dom 4 lysdioderna, mottagarpinnen och TXD till en logik analysator, så att jag kan se precis vad som händer

.
Kopplar man ihop RTS och CTS så skickar µP ut den mottagna informationen direkt på TXD.
Logik analysatorn är nog faktiskt mitt bästa inköp pga den har underlättat så mycket pga den visar allt så visuellt vad som händer när man håller på och testar.
// Marcus
Re: NEXA mottagare
Postat: 23 februari 2010, 19:09:32
av helldin
Hur lång är varje bit samt tiden mellan hög å låg?
Re: NEXA mottagare
Postat: 1 april 2010, 21:21:35
av danielr112
Hur har det gått med denna? Jag behöver bygga mig en logger så ja kan se allt jag styr med mina "nexa" sändare hemma..

Re: NEXA mottagare
Postat: 1 april 2010, 21:48:41
av lond
Jag har 2st byggda, en som sitter i en ombyggd IKEA-lampa med RGB-led i och en som fungerar som en logger/experiment-plattform.
Funderar på att göra en ny variant med µP med inbyggd 8MHz kristall.
// Marcus
Re: NEXA mottagare
Postat: 7 april 2010, 13:37:01
av E85
Här är en kodsnutt jag skrev till AVR för att agera mottagare. Kan krävas lite eget funderande eftersom jag inte har kommenterat och kommer inte ihåg vilken frekvens jag körde den i...
Som ni ser har jag hårdkodat koderna från min fjärr (0x00510551 osv). Beskrivningen hur koderna ser ut binärt finns att hitta på nätet nånstans... eller så spelar man in de helt enkelt med lite ändring i koden.
Kod: Markera allt
volatile unsigned char rfdatahigh;
volatile unsigned char rfdatacnt;
volatile unsigned long int rfdata;
ISR(TIM0_COMPA_vect)
{
static unsigned int counter;
if (counter < 65535) counter++;
if (rfdatahigh && counter > 400)
{
rfdata = rfdata << 1;
rfdata += (PINB & _BV(PB2)) ? 1 : 0;
rfdatahigh = 0;
if ((rfdata & 0x00FFFFFF) == 0x00510551)
{
button1_pressed();
counter = 0;
}
else if ((rfdata & 0x00FFFFFF) == 0x00511151)
{
button2_pressed();
counter = 0;
}
else if ((rfdata & 0x00FFFFFF) == 0x00510554)
{
button3_pressed();
counter = 0;
}
else if ((rfdata & 0x00FFFFFF) == 0x00511154)
{
button4_pressed();
counter = 0;
}
}
}
ISR(PCINT1_vect)
{
rfdatahigh = 1;
TCNT0 = 0;
}
int main(void)
{
DDRB = 0x00;
PORTB = 0x03;
DDRA = 0x0F;
//Setup Timer 0
TCCR0A = 0x02;
TCCR0B = 0x02;
OCR0A = 0x4A;
TCNT0 = 0;
TIMSK0 = _BV(OCIE0A);
//Setup interrupt on pin change
GIMSK |= _BV(PCIE1);
PCMSK1 = 0x04;
sei(); //Enable interrupts
while(1) {
//Gör nåt kul
}
}