PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit USART und sleep mode



John Locke
15.08.2009, 01:20
Hallo zusammen,

ich habe eine simple Schaltung mit einem Attiny2313. Dieser soll ein Paar Zeichen über den USART ausgeben wenn eine Taste Gedrückt wird.



void com_sendByte(unsigned char data)
{
//warten bis data register leer
while(!(UCSRA & (1<<UDRE)));
//Daten senden
UDR = data;
}

void com_sendString(char *dataPtr)
{
while(*dataPtr)
{
com_sendByte(*dataPtr);
dataPtr++;
}
}

ISR(PCINT_vect)
{
if(~PINB & (1 << PINB0))
com_sendString("A1");
if(~PINB & (1 << PINB1))
com_sendString("A2");
}


Funktioniert soweit. Nun möchte ich die Schaltung mit einer Batterie betreiben, es soll also so wenig Strom wie möglich verbraucht werden. Wenn ich in der main loop folgendes schreibe, sendet der USART nur noch Murks. :-s



int main()
{
...
sei();
while(1)
{
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_mode();
}
}


Kann mir Jemand helfen? Ich komme nicht weiter...

sternst
15.08.2009, 09:26
Wenn ich in der main loop folgendes schreibe, sendet der USART nur noch Murks.
Weil du dem UART den "Saft abdrehst" bevor er fertig ist. Wenn du schlafen gehen willst, musst du warten, bis der UART alles rausgeschickt hat.