Hallo, ich habe jetzt mithilfe des Tutorials für den UART und Interrupts ein Programm fertiggestellt, dass Zeichen von Labview empfangen soll und damit eine LED steuert. Später soll damit Leistungselektronik geregelt werden. Der Compiler (AVR-GCC) zeigt keine Fehler an, aber wenn ich den ATmega8 an den PC anschließe und mein Teamkollege das Labviewprogramm startet passiert nichts, d.h. die LED bleibt aus. Uns ist nur aufgefallen, dass BEIDE LEDs kurz aufblinken, wenn der erste Befehl von Labview gesendet wird, was wir uns aber nicht ekrlären können. Ich habe hier im Forum schon Beiträge zu Labview und Interrupts durgeschaut, aber nichts gefunden, was das Problem behebt. Wir haben schon überprüft, dass wir dieselbe Baudrate eingstellt haben. Kann mir jemand helfen oder sagen, wo ich noch etwas Hilfreiches dazu lesen könnte? Gruß Karima
Ehe wir auf die Suche nach Software Fehlern gehen: Hast du schon die grundsätzliche Funktionsfähigkeit der RS232 geprüft? Normalewrweise beginnt man immer damit, dass man die RS232 in der Art in Betrieb nimmt, dass der µC sendet und der PC hört zu. Am PC läuft ein Terminalprogramm welches alles anzeigt, was es empfängt. Und wenn die Kommunikation aus gründen von falschen Baudraten und oder sonstigen Taktschwierigkeiten scheitert, dann zeigt des Terminalprogramm am PC eben den Müll an, den es empfängt. Und das ist allemal besser, als der PC sendet, der µC empfängt und du siehst nicht, dass die Komunikation schon mal grundsätzlich wegen fehlerhafter Takteinstellungen nicht funktioniert. Daher: erstes Ziel: µC -> PC und wenn das dann funktioniert, dann funktioniert auch die fehlerfreie Übertragung von Bytes in der Gegenrichtung und man kann sich daran machen, Fehler in der Auswertung der übertragenen Daten zu suchen. Aber ohne die Gewissheit, dass die Übertragung prinizpiell funktioniert, ist das Stochern im Nebel. Daher: erst mal sicherstellen, dass die gesendeten Bytes auch richtig ankommen. Und am einfachsten geht das durch µC->PC
Hallo Karl, danke für den Tip. Unser Betreuer hat gemeint, wir sollen mit empfangen beginnen(Er hat den uCmal getestet, er scheint also zu gehen), aber uns ist auch schon aufgefallen, dass wir so gar nicht wissen, was vorgeht. Ich werde mich mal an eine Sendenfunktion setzen. Danke! Viele Grüße Karima
Wie habt ihr das hier
1 | befehl_led=empfangen_lab_auswerten(uart_string[UART_MAXSTRLEN + 1]); |
durch den Compiler gebracht? Das ergibt zumindest eine Warnung. Ihr sollt Warnungen ernst nehmen! Abgesehen davon: zuviel Code auf einmal geschrieben. die erste main() könnte so aussehen (*)
1 | int main(void) |
2 | {
|
3 | initialisiere_uart(); |
4 | |
5 | //Interrupts aktivieren
|
6 | sei(); |
7 | |
8 | while( 1 ) { |
9 | if ( uart_str_complete==1 ) |
10 | {
|
11 | uart_send_string( uart_string ); |
12 | uart_str_complete = 0; |
13 | }
|
14 | }
|
15 | }
|
Das reicht schon. Nicht mehr Code schreiben. Ihr wollt so schnell wie möglich was haben, was ihr testen könnt! Sonst gehts euch so wie jetzt. Ihr sitzt da mit einem Haufen Code der nicht funktioniert und habt keine Ahnung, wo ihr mit Fehlersuche anfangen sollt. Das allererste Testprogramm sollte eigentlich sogar noch einfacher sein. Kein Interrupt, keine Strings. Programm wartet auf Zeichen, Programm schickt Zeichen sofort zurück. Und von dort weg tastet man sich sukzessive und in kleinen Schritten bis zur endgültigen Aufgabenstellung vor. (*) besser ist jedoch trotzdem erst mal durch Testen von µC->PC die Funktion der UART grundsätzlich zu testen und als 'funktioniert' abhaken zu können. Wenn euer Betreuer das für euch gemacht hat, dann ist das ok. Ich würds allerdings trotzdem tun. Die 5 Minuten programmieren (bei euch wirds länger dauern) sind gut investiert - und danach hab ich mich mit eigenen Augen davon überzeugt, das das prinzipiell klappt.
Warum hängt ihr nicht ein oszi an den RS 232 Eingang des µC? Mit einem Debugger (AVR JTAG ICE 2) kann das Programm im Betrieb an entsprechender Stelle angehalten werden und ihr schaut nach, ob der Controller ließt was der Rechner sendet.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.