Hallo Zusammen,
ich habe jetzt ein ganz interessantes Problem, das eigentlich
unglaublich aber auch reproduzierbar ist.
Ich habe eine Gyro Werte den ich über Uart ausgeben möchte.
Für das Probgramm brauche ich noch einen Backup-Gyro Wert
den ich, gleich beim Start vor der Hauptschleife definiere.
Jetzt das unglaubliche, start ich die Uart Funktion Putchars
ändert sich der Backup Wert. Es sieht so aus aus würde dieser
immer wieder aufs neue, mit dem aktuellen Gyro-Wert überschrieben
werden.... (????)
Kommtiere ich die Putchars() aus, ändert sich der Wert nicht.
Ist das ein Compilerfehler?
Ich habe jetzt mal das Probramm soweit abgespeckt das man
das Programm hoffentlich leichter verstehen kann.
lcd_number(sensor_wert_backup);// Zur Kontrolle...
89
90
// Uart Ausgabe
91
put_number(0);// Sobald diese auskommentiert bleibt
92
// die Variable sensor_wert_backup
93
// unverändert
94
}
95
}
96
}
Ich arbeite mit einem Atmega64, compiliere mit WinAVR.
Ich sitzt seit heut Nachmittag an dem Problem...
Über Hilfe würde ich mich sehr freuen.
Frohe Weihnachten, vielen Dank
Viele Grüße
Askan
Dein Programm resetet, sobald das erste Zeichen gesendet wird, weil Du
keine Interrupt-Routine für das UART-Senden deklariert hast, aber
dennoch die RX/TX-Interrupts einschaltest.
Nein, der Interrupt kommt wenn der puffer leer, resp voll ist, da muss
man dann nicht mehr warten. DSondern gleich das zeichen in das UART
schieben, resp ausm UART lesen. Speziell aufpassen muss man am Ende des
zu sendenden Blockes, dann kommt der Interrupt, man schiebt allerdicngs
kein neues Zeichen rein. Dann muss man gemaess datenblatt abbrechen.
Askan S. wrote:
> Hallo,>> da im Tutorial nich so viel steht, reicht dann einfach
Ist schon ok so.
> Ich habe diesen Teil ja schon in den put_char() Funktionen> gelößt.
Eben. Wenn du das Versenden einfach in einer Schleife machst, dann
schalte doch den TX-Interrupt einfach ab, den brauchste doch dann
garnicht -- schließlich prüfst du ja schon in der Schleife, ob der UART
bereit ist. Und das Interruptflag, das du da prüfst, wird auch gesetzt,
wenn der Interrupt nicht freigegeben ist.
Und Interrupts sind nicht generell immer vorzuziehen. Im Hauptprogramm
ists einfach unnötig, die Senderoutine nochmal mit Interrupts
aufzubrechen, solange du sowieso nix Andres zu tun hast.
Ansonsten rumpuffern, wie der wilde Gaul vorgeschlagen hat :-)
Hi,
vielen Dank für die Hilfe. Ich denke ich komme jetzt, auch vielen
Dank für das Beispiel, hatte hier schon lange gesucht.
Frohe Weihnachten, Viele Grüße
Askan