Forum: Compiler & IDEs ATmega8 empfängt nichts von Labview (USART, Interrupts)


von Karima L. (runkelruebe)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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

von Karima L. (runkelruebe)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Mirko (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.