Hallo Zusammen, habe ein kleine Problem mit einem atmega 128. Vieleicht ist es auch ein verständniss problem von mir. Was ich vor habe: Ich möchte den RS232 ausgang des atmega so programmieren das ich auf hyperterminal den printf befehl sehen kann z.B. zur ausgabe vom ADC. Als test würde mir auch erst mal "Hallo Welt" reichen, aber selbst das bekomme ich nicht hin ! Nur ist meine frage brauch ich nur den Tx und Rx vom RS232 anschließen (und dann in die RS232 vom PC) und wie ist de quellcode für C um die RS232 anzusprechen ich werde da ned schlau draus. Hab noch keine große erfahrung mit dem AVR. Vielen dank erst mal
Zum Thema Hardware guckst du zb hier http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART (kurz gesagt: nein, so einfach ist das nicht wie du dir das vorstellst. RS232 arbeitet mit Pegeln von +12V und -12V) Zum Thema Software: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_UART Es lohnt sich, wenn man sich die Tutorials durchschaut. Da findet sich vieles. AVR-GCC-Tutorial AVR-Tutorial
Folgendes AVR Development Board habe ich http://www.micro4you.com/files/atmega128/BASEAVRAT... Die AVR-GCC-Tutorial hab ich auch schon nach geschaut werde da aber echt ned wirklich schlau draus was RS232 betrifft. Oder habe ich irgend eine andere möglichkeit , das aufem PC angezeigt zu bekommen. Gruß
Arbeitsanweisung: Lesen http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_UART Falls spezielle Fragen da sind, fragen. Aber nicht sowas wie: Ich hab keine Ahnung, bin zu faul zum Lesen oder ich brauch doch nur den Code.
Hi Jörg, Wo hapert es denn bei dir genau? 1. Vergiss erst mal das mit dem Printf und versuche nur mal ein 'A' auszugeben! Dazu brauchst du eine 'putchar' - Funktion. Hast du die Init der UART, verstanden bzw nachvollziehen können? >Oder habe ich irgend eine andere möglichkeit , das aufem PC angezeigt zu >bekommen. was meinst du damit? Wenn du nur Buchstaben und Zahlen ausgibst, sollten die im Hyperterminal und Windows sichtbar sein. Stephan
Also es harpert bei mir ob ich mit meinem bord direkt auch an die RS232 des PC gehen kann und dann nur Tx und Rx anschlißen muss oder sonst noch was. des weitern habe ich ein beispiel quellcode geladen aber bekomme aber keine ausgabe vom Hterm! Hier der quellcode: #include <mega128.h> // ATmega128 MCU #include <stdio.h> // Standard Input/Output functions void main(void) { char uart_data; // RS232 Buffer // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 UCSR0A=0x00; UCSR0B=0x18; UCSR0C=0x86; UBRR0H=0x00; UBRR0L=0x67; printf("\fHello ET-BASE AVR MEGA64/128...TEST RS232 CH0\n\r"); // Call printf Function printf("Please enter any key to echo data\n\n\r"); while (1) // Loop Continue { uart_data = getchar(); // Wait RS232 Receive putchar(uart_data); // Echo data } } Die Init des UART habe ich so halb verstanden. Danke schon mal
du brauchst ein Kabel, war keines dabei? Wenn du keins hast dann baue dir dieses hier 'Nullmodemkabel'. Aufbau eines 3-Draht-Nullmodem-Kabels mit 9-poligen D-Sub-Buchsen http://de.wikipedia.org/wiki/Nullmodem-Kabel Stecker 1 -> ist der PC Stecker 2 -> dein Board Stephan
Hallo Stephan, habe mir ein Kabel selber gelötet, aber irgend wie geht das immer noch nicht ich verzweifle da dran. Der quellcode wir wie gesagt auch richtig Compeliert und AVR Studio zeigt auch keine Fehler Meldung. hast du noch eine Idee? Gruß Jörg
>hast du noch eine Idee?
Ja, Kabel falsch. Masse angeschlossen?
Tx,Rx gekreutzt?
Brück mal auf der Empfängerseite Tx und Rx ohne angeschlossenen uC. Das dürfte dann bei richtigem Kabel wie ein Echo funktionieren.
Jörg Roesberg schrieb: > hast du noch eine Idee? Sieh erst mal zu, dass du deine Hardware debuggst. Das ist jetzt zwar ein Problem, weil du den Mega128 nicht von der Platine runternehmen kannst. Daher: programmier dir den µC so, dass am Port E alles Eingang ist, dann sieh zu, dass du am Pinconnector die Pins PE0 und PE1 miteinander kurzschliessen (brücken) kannst. (Da der µC die Pins auf Eingang hat, passiert ihm nichts). Sinn der Sache: Dadurch werden die RS232 Datenleitungen um Anschluss 0 kurzgeschlossen. Am PC startest du Hyperterminal und tippst einfach mal drauflos. Alles was du tippst musst du im Hyperterminal wieder sehen. Dadurch testest du deine Hardware: das Kabel und die RS232-Umsetzer auf der µC-Platine. Das von dir getippte geht über das Kabel zur Platine, wird dort von RS-232 Pegel auf 5V Pegel umgesetzt, läuft weiter bis zur Brücke am Port E und von dort auf dem gelichen Weg wieder zurück zum PC. Wenn irgendwas in der Hardware nicht stimmt, dann funktioniert das nicht! Meistens ist es dann das Kabel, das falsch rum ausgekreuzt ist. Testweise am PC auch mal "lokales Echo" zu und abschalten. Bei eingeschaltetem lokalen Echo musst du jeden tastendruck 2 mal sehen.
Also da geht nix raus noch rein. Hab jetzt mal an Rx und Tx gegen Masse(am µC) gemessen da bei Tx messe ich ca -6 V und bei Rx 0V. Das komische ist das ich das aber auf beiden RS232 auf dem µC messe. Mein quellcode ist müsste ja richtig sein. Also langsam denke ich auch ich bin zu doof. Gruß
Hallo zusammen, So ich bin etwas weiter das RS232 muss in Ordnung sein hab das jetzt noch mal mit dem Debugen gemacht und ich kein im Hterm was eingeben und das wird dann in der ersten zeile direkt wieder ausgegeben. Hab dann mal an gefangen das Programm noch mal neu zu schreiben auch laut AVR GCC Tutorial. Hab den quellcode als datei angehangen. Ich bekomme nur dann einige errors beim compielieren, hab das auch mal als bild angehangen. Gruß Jörg
Jörg Roesberg schrieb: > Hab dann mal an gefangen das Programm noch mal neu zu schreiben auch > laut AVR GCC Tutorial. Das Tutorial ist schon ok. Aber: Du sollst auch immer das Datenblatt zu deinem konkreten µC in Griffweite haben und das was du im Tutorial siehst oder liest, damit überprüfen, ob das bei deinem µC auch 100% genau gleich ist. Dein Mega128 hat zb 2 eingebaute UART. Die heissen dann zb UCSRA0 und UCSRA1 wobei die angehängte Zahl jetzt aussagt, auf welche UART sich das Register bezieht - auf die USART 0 oder auf die USART 1. Im Tutorial gibt es diese Unterscheidung nicht. Dort wird von einem µC ausgegangen, der nur 1 USART hat. Dort heißt das Register dann einfach nur UCSRA.
Jörg Roesberg schrieb: > So ich bin etwas weiter das RS232 muss in Ordnung sein hab das jetzt > noch mal mit dem Debugen gemacht und ich kein im Hterm was eingeben und > das wird dann in der ersten zeile direkt wieder ausgegeben. Hast du das auch kontrolliert, ob das auch tatsächlich über das Kabel gelaufen ist? Terminalprogramme haben nämlich eine Einstellung 'lokales Echo', bei der getipptes grundsätzlich ebenfalls mit ausgegeben wird. Mit einem einfachen Abziehen des Kabels kann man aber die Fälle leicht unterscheiden: Wird nach dem Kabelabziehen beim Tippen immer noch ausgegeben, dann kommt das vom lokalen Echo. Wird nichts mehr ausgegeben, dann kann man davon ausgehen, dass tatsächlich die Übertragung über das Kabel hin und auch wieder zurück gelaufen ist. Bei jedem Test immer auch den Gegentest machen. Das kostet nichts und man hat die Gewissheit, dass man auch tatsächlich das testet, was man testen will und nicht irgendeinem anderen Effekt aufsitzt.
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.