Nun hab ich ein neues Problem - ein sehr seltsames, dass ich mir echt nicht erklären kann...
Das Ganze fing damit an, dass mein Pony angefangen hat zu streiken und nur etwa 5-6% aller Schreibversuche erfolgreich beendet wurden.
Daraufhin hab ich geradzu verzweifelt irgendwelche eher schlecht gelöteten Stellen neu gelötet und tausende von Stellen durchgegangen, ob sie gut gelötet sind etc.
Nun geht das Programmieren meist, jedoch muss ich ab und zu meinen LCD abklemmen - sehr seltsam :-?
Nun habe ich den oberen Code auf folgenden Code erweitert:
Code:
#include "../main.h"
volatile unsigned char data;
void USART_Init(void) {
UCSRB = (1<<RXCIE) | (1<<RXEN) | (1<<TXEN);
//UCSRB = (1<<RXEN) | (1<<TXEN);
UBRRL = (unsigned char) USART_BAUD_SELECT;
}
void USART_transmit (unsigned char c) {
while (!(UCSRA & (1<<UDRE))) {}
UDR = c;
}
unsigned char USART_receive (void) {
while(!(UCSRA & (1<<RXC))) {}
return UDR;
}
void USART_transmit_string (unsigned char *string) {
while (!(UCSRA & (1<<UDRE))) {}
while ( *string)
USART_transmit (*string++);
}
SIGNAL (SIG_UART_RECV) {
data = UDR;
lcd_write("muh");
}
int main (void)
{
USART_Init();
lcd_init();
data = ' ';
lcd_on(CURSOR + BLINK);
lcd_write("Ready 2 GO");
lcd_setPos(1,2); lcd_write("3"); lcd_delay(80);
lcd_setPos(1,2); lcd_write("2"); lcd_delay(80);
lcd_setPos(1,2); lcd_write("1"); lcd_delay(80);
USART_transmit_string("lets go :)");
lcd_cls();
sei();
while (1)
{
if (data == 'c') lcd_cls();
else if (data != ' ')
{
lcd_write(data);
USART_transmit(data);
data = ' ';
}
}
}
Alle Vordefinierten Eigenschaften sowie die Funktionen für die LCD werden über die main.h eingebunden.
Nunja, bewirken sollte der Code folgendes:
Wenn ich über mein Terminal etwas sende, sollte auf meinem LCD Bildschirm das zeichen angezeigt werden und als zweite Bestätigung nochmal zurück ans Terminal geschickt werden.
In der Praxis passierte folgendes:
Das LCD wurde initialisiert, der Countdown läuft ab, dann wurde der Bildschirm schwarz und wurde erneut initalisiert und der Countdown erschien wieder.
Daher hab ich in die SIGNAL die Ausgabe "muh" reingepackt. Nun wurde kurz bevor das LCD schwarz wird noch muh ausgegeben.
Danach fing der µC die main-Routine wieder von neu an. Als ob das Ganze nicht seltsam genug wäre, hier noch ne Kuriosität:
Wenn ich das RS-232 Kabel entferne, ändert sich nix, der µC empfängt trotzdem noch irgendetwas, gibt kurz "muh" aus und resetet.
Ich hab mir gedacht, das ich vllt irgendwie den Watchdog eingeschaltet haben könnte, jedoch weiß ich gar net, wie man den an kriegt und bezweifel auch, dass das sein kann.
Naja, zum testen habe ich wieder die alte File mit dem Hello World auf den µC gepackt, aber das Terminal empängt wieder nur Müll, ähnlich wie vorhin, als der Quarz net stimmte...
*Idee*
---------------------------Kurze Schreibpause-----------------
Nun, ich hab kurz geschaut, und die Fusebits haben sich irgendwie wieder so gesetzt, dass der interne Quarz verwendet wird.
Irgendwelche logischen Erklärungen dafür?
Nachdem ich die Fusebits nun umgestellt habe, arbeitet das Dongle wieder net sauber, ich kann nur coden, wenn ich die Platte mit LCD und USART abklemme...
Naja, nun hab ich das neue Programm wieder getestet, und beim ersten Mal gab der im Terminal "Lets go )))))))))))))))))))))))))))[...]" und auf dem LCD "muh)muh)muh)[...]" aus.
Danach hab ich mal dies mal das wegkommentiert oder hinzugefügt und jetzt kommt schonwieder nur Müll im Terminal raus: "88ÿ8ð8ðxð8ðxpü
" Und dementsprechend auch auf dem LCD
Ich verstehs net...
Lesezeichen