Youp ist mir klar war aber auch nicht fertig 
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);
}
}
Der Simulator überspringt zuteil die Portsetz befehle mach ich da etwas falsch?
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
Lesezeichen