Youp ist mir klar war aber auch nicht fertig![]()
Der Simulator überspringt zuteil die Portsetz befehle mach ich da etwas falsch?Code:void Latch_Serialout(uint8_t DATEN){ PORTD &= ~(1<<PD1); //Serial clock Down uint8_t Puffer = 0; uint8_t Bitmask = 1; for (uint8_t x = 0;x < 8;x++) { Puffer = (DATEN & Bitmask); if ((Puffer == 1)||(Puffer == 2)||(Puffer == 4)||(Puffer == 8)||(Puffer == 16)||(Puffer == 32)||(Puffer == 64)||(Puffer == 128)){ PORTD |= (1<<PD0); //setzen; } else{ PORTD &= ~(1<<PD0); //Rüsetzen } PORTD |= (1<<1); //setzen PORTD &= ~(1<<1); //Rücksetzen Bitmask = (Bitmask << 1); } }
EDIT: Kleines Beispiel wenn ich mit dem wert 255 in die Funktion gehe fängt meine bitmaske den Wert ab und der Puffer == 1 tritt ein.
Das klappt auch aber der simulator überspringt dann
PORTD |= (1<<PD1); //setzen
und macht gleich
PORTD &= ~(1<<PD1); //Rücksetzen
Das ist natürlich doof den das latch bekommt dann keinen ganten takt
EDIT:
@ robocat deine idde find ich cool mit dem Daten nach rechts schieben.
Aber im 255 fall funktioniert das ja nicht mehr weil das 7 bit 1 ist und doch 1er nachgeschoben werden. oder ist das beim AVR anders?
EDIT:
Ok es ist scheinbar anders bzw liegt am unsiend ... ich hab wohl nur siend geschiftet
Code:void Latch_Serialout(uint8_t DATEN)void Latch_Serialout(uint8_t DATEN) { PORTD &= ~(1<<PD1); //Serial clock Down for (uint8_t x = 0;x < 8;x++) { if ((DATEN & 1) == 1){ PORTD |= (1<<PD0); //setzen; } PORTD |= (1<<PD1); //setzen PORTD &= ~(1<<PD1); //Rücksetzen PORTD &= ~(1<<PD0); //Rüsetzen DATEN = (DATEN >> 1); } }
Sieht jetz auch viel sauberer aus und braucht keine extra variablen mehr







Zitieren

Lesezeichen