Wegen dem Auslesen von Servosignalen von einer Fernsteuerung kann ich möglicherweise helfen.
Der angehängte Code zeigt den Ausschlag auf 8 Leds am PortA an.
Als Eingang wurde PORTB 0 genommen.
Leider hatte ich die Fernsteuerung nur für 1 Nachmittag zur Verfügung, also ist diese noch weit von dem entfernt was man als perfekt und schön programmiert bezeichnen würde![]()
Es wird schon eine Selbstkalibrierung durchgeführt (herausfinden des maximums und minimums)
Der Code ist für Codevision geschrieben, dürfte aber ohne großes Ändern auch auf AVR-GCC funktionieren.
Es wurde ein ATMega163 mit 4Mhz verwendet.
Wenn ich wieder eine Fernsteuerung zur Verfügung habe werde ich diesen Code weiter programmieren - bei Bedarf stelle ich ihn dann hier rein.
Code:#include <mega163.h> unsigned int counter=0; unsigned int dauer=0; unsigned int min=65535; unsigned int max=0; unsigned float schritt=0; unsigned int wert[8]; unsigned int i=0; interrupt [TIM0_OVF] void timer0_ovf_isr(void) { TCNT0=250; if(PINB.0 == 1) { counter++; } if((counter > 0) && (PINB.0 == 0)) { dauer = counter; counter = 0; } } void main(void) { PORTA=0x00; DDRA=0xFF; PORTB=0xFF; DDRB=0x00; TCCR0=0x01; TCNT0=0x00; TIMSK=0x01; #asm("sei") for(i=0;i<8;i++) { wert[i]=0; } while (1) { max = dauer; } if(dauer < min) { min = dauer; } schritt = ((float)max-(float)min)/8; wert[0] = schritt; wert[1] = wert[0] + schritt; wert[2] = wert[1] + schritt; wert[3] = wert[2] + schritt; wert[4] = wert[3] + schritt; wert[5] = wert[4] + schritt; wert[6] = wert[5] + schritt; wert[7] = wert[6] + schritt; if(dauer > wert[0]) { PORTA.7 = 1; } else { PORTA.7 = 0; } if(dauer > wert[1]) { PORTA.6 = 1; } else { PORTA.6 = 0; } if(dauer > wert[2]) { PORTA.5 = 1; } else { PORTA.5 = 0; } if(dauer > wert[3]) { PORTA.4 = 1; } else { PORTA.4 = 0; } if(dauer > wert[4]) { PORTA.3 = 1; } else { PORTA.3 = 0; } if(dauer > wert[5]) { PORTA.2 = 1; } else { PORTA.2 = 0; } if(dauer > wert[6]) { PORTA.1 = 1; } else { PORTA.1 = 0; } if(dauer > wert[7]) { PORTA.0 = 1; } else { PORTA.0 = 0; } }; }







Zitieren

Lesezeichen