Richte deinem Kollegen einen Gruss von mir aus
Folgendes:
Ich werd' mir aber meine Assembler-routine raussuchen (auswendig erzähl' sonst vielleich einen stiefel)Code:a = portB & 0x8; // ergibt 0x00 oder 0x08 !!! b = portB & 0x10; // ergibt 0x00 oder 0x10 !!! // daher kann man man nicht auf == 1 abfragen, sondern auf ==0x08 bzw ==0x10 // IMHO aber besser und besser lesbar // Abfrage auf NULL und NICHT NULL if (a && !a_old) P_a = 1; else P_a = 0; if (b && !b_old) P_b = 1; else P_b = 0;
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Habe so eben die Steuerung in Betrieb genommen. Und Sie funktioniert einwandfrei.
Besten danke für euere Hilfe.
Das ist der Quellcode mit dem ich meinen ATtiny gefütter haben. Funktioniert sogar alles besser als gedacht
Gruß
Rolf
Code:#include <avr/io.h> unsigned char chanal_a; unsigned char chanal_b; unsigned char temp_a; unsigned char temp_b; unsigned char a_old; unsigned char b_old; unsigned char Flanke_a; unsigned char Flanke_b; unsigned char links; unsigned char rechts; #define F_CPU 1000000 // definiert die Frequenz des Microcontrollers 3,68 MHz #include <avr/io.h> int main(void) { DDRB = DDRB | (1<<PB1) | (1<<PB2) | (1<<PB0) ; // PORTB.1 und PORTB.2 als Ausgang verwenden der rest ist automatisch ein eingang while(1) { PORTB = PORTB & 0xFE; chanal_a = ((PINB & 0x8)>>3); chanal_b = ((PINB & 0x10)>>4); if ((chanal_a == 1) && (a_old == 0)) { Flanke_a = 1; } else { Flanke_a = 0; } if ((chanal_b == 1) && (b_old == 0)) { Flanke_b = 1; } else { Flanke_b = 0; } temp_a = chanal_b & Flanke_a; temp_b = chanal_a & Flanke_b; links = ((temp_a == 1) & (temp_b == 0)); rechts =((temp_a == 0) & (temp_b == 1)); //zurdnung auf Ports if ((links==1) && (rechts==0)) { PORTB = PORTB | 0x04; } else { PORTB = PORTB & 0xFD; } if ((rechts==1) && (links==0)) { PORTB = PORTB | 0x02; } else { PORTB = PORTB & 0xFB; } a_old = chanal_a; b_old = chanal_b; PORTB = PORTB | 0x01; } }
Lesezeichen