Hallo Ich möchte Daten von meinem ATmega8 an den PC übertragen. Das wollte ich über die serielle Schnittstelle machen. Ich habe die Anschlüsse TxD, RxD und GND vom ATmega8 an den "USB to Seriell Converter" angeschlossen. (Obere Reihe, Pin 2,3 und 5) Mein Bascom Programm sieht so aus: $regfile = "m8def.dat" $crystal = 3686400 $baud = 9600 Do Print "Hallo Welt!" Loop Allerdings bekomme ich nicht die Zahlen raus, die raus kommen sollten! Woran kann das liegen?? Danke Denny
Weil der USB-Seriell-Konverter auf RS232-Pegel wandelt, der AVR aber TTL-Pegel hat/braucht. Da dazwischen gehört noch ein MAX232. Oder alternativ: FT232, der kann direkt TTL nach USB.
am AVR schon. Auf PC-Seite bzw. USB-Wandler-Seite nicht. Als logische 1 ist irgendwas im Bereich von -15...-3V erlaubt, eine logische 0 ist irgendwas zwischen +3...+15V.
Naja, mit OPVs die Spannungsbereiche umbauen. Ist aber etwas komplizierter, als nen MAX232 zu verbauen.
Man kann den AVR schon direkt an die USB-Datenleitungen hängen (bzw. entsprechende USB-AVRs verwenden). Aber da brauchts dann schon etwas mehr Software als nur "Print". Glaub nicht, dass Bascom für Nicht-USB-AVRs da was fertiges hat.
Zur Not schmeckt die Wurst auch ohne Brot.. Im Notfall kann mann auch mal den AVR direkt, also ohne Pegelwandler und invertierende Stufe anschliessen. Dabei benutzt du dann aber die Bascom-Soft-Uart. Open "COMD.1:9600,8,N,1,INVERTED" For Output As #1 Open "COMD.0:9600,8,N,1,INVERTED" For Input As #12 Sieh mal in der Bascom Hilfe nach.
Haut aber nur solange hin, wie der PC mit seinem "Irgendwas zwischen 15-3V"-Spannung in nem Bereich bleibt, den der AVR auch verträgt. Wenn der PC da wirklich mit 12V rausgeht, lebt der AVR nicht lang.
Ne, ne, das geht schon. RS232 begrenzt den Ausgangsstrom auf etwa 20mA und ist dadurch sogar kurzschlussfest. Ich benutze so was schon mal zum Debuggen.
screwdriver schrieb: > Zur Not schmeckt die Wurst auch ohne Brot.. > > Im Notfall kann mann auch mal den AVR direkt, also ohne Pegelwandler und > invertierende Stufe anschliessen. > Dabei benutzt du dann aber die Bascom-Soft-Uart. > > Open "COMD.1:9600,8,N,1,INVERTED" For Output As #1 > Open "COMD.0:9600,8,N,1,INVERTED" For Input As #12 > > Sieh mal in der Bascom Hilfe nach. Hallo Entschuldigung, dass ich mich so lange nicht gemeldet habe. Heißt das, dass ich die Anschlüsse RxD, TxD und GND direkt an die serielle Schnittstelle anschließen kann?? Dabei würde ich dann den oben genannten Code verwenden. Vielen Dank schon Mal für die Hilfe!
>Heißt das, dass ich die Anschlüsse RxD, TxD und GND direkt an die >serielle Schnittstelle anschließen kann?? Ja, kannst Du bei AVR direkt anschließen, weil die Pins interne Schutzdioden haben. Diese leiten die positive und negative Pegel der RS232 gegen Vcc bzw. Gnd ab. Eine konforme RS232-Schnittstelle begrenzt den dabei fließenden Strom auf ca. 20mA. Sicherheitshalber habe ich aber noch in den Signalleitungen jeweils einen Schutzwiderstand von 220R. Das Programmbeispiel kannst du direkt im Bascom-Terminal testen. Da die SoftUart von Bascom keine Echo-Funktion besitzt, mußt du deine Eingabe blind machen und mit der RETURN-Taste abschließen. $crystal = 16e6 Open "COMD.6:9600,8,N,1,INVERTED" For Input As #1 Open "COMD.5:9600,8,N,1,INVERTED" For Output As #2 Dim Text$ As String * 16 Print #2 , "Test" Do Print #2 , "Name: " ; Input #1 , Text$ Print #2 , "Hallo, " ; Text$ Loop End
Vielen Dank! Das funktioniert wunderbar! Ich habe es ohne die Widerstände versucht und es geht auch.
Ich habe noch eine Frage: Ich kann nun Daten zum PC senden. Aber wenn ich Daten mit dem Terminalprogramm zum Mikrocontroller senden will, geht das nicht Bascom bleibt einfach bei dem Input hängen. Am Oszilloskop sehe ich die Übertragung. Da stimmt irgendwas mit den Pegeln nicht. Was kann ich tun??
Denny schrieb: > Da stimmt irgendwas mit den Pegeln nicht. > Was kann ich tun?? Nimm einen richtigen MAX232
> Was kann ich tun?? Nimm einen Pegelwandler! http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf Dort steht auf Seite 242: Voltage on any Pin except RESET with respect to Ground: -0.5V to VCC+0.5V Und weiter: Stresses beyond those listed under "Absolute Maximum Ratings" may cause permanent damage to the device. This is a stress rating only and functional operation of the device at these or other conditions beyond those indicated in the operational sections of this specification is not implied. Exposure to absolute maximum rating conditions for extended periods may affect device reliability. Kurz gesagt, es ist totaler Murks! Kaufe dir einfach einen MAX232, besser noch einen MAX232A oder MAX202 (die beiden letzteren kommen auch mit 100nF Kondensatoren für die Ladungspumpen aus).
Das Problem ist, dass ich keinen hier habe. Und wenn ich einen Bestelle dauert das mindestens eine Woche, bis ich den habe.
Schau Dir die Hilfe zu Open an, ganz unten findest Du ein Beispiel: Open "comd.0:300,8,n,1,inverted" For Input As #2 Das "inverted" macht die Verwendung eines Levelshifters überflüssig, ist natürlich keine perfekte Lösung, das wäre eben ein MAX232.
@denny: Zeig mal bitte deinen Programmcode und wie ist der mega8 angeschlossen? screwdriver
Chris schrieb:
> Weil Du den ATMega nun außerhalb der Absolute Maximum Ratings betreibst.
Sehe ich nicht so. Die internen Schutzdioden sorgen doch gerade dafür,
dass die von dir zitierten maximalen Spannungen eingehalten werden,
indem die Überspannungen zu Vcc und Gnd abgeleitet werden. Natürlich hat
diese Schutzfunktion irgendwo ihre Grenze. Und da der maximal zulässige
Eingangsstrom per I/O-Pin im mega8-Datenblatt auf +/-40mA datiert ist,
ist dies wohl auch in erster Näherung der maximal zulässige Strom über
die jeweilige Schutzdiode.
Fazit: Da mir kein RS232-Schnittstellentreiber bekannt ist, der mehr als
40mA treiben kann wird der mega8 innerhalb der spezifikationen
betrieben.
screwdriver
Hi >Und da der maximal zulässige >Eingangsstrom per I/O-Pin im mega8-Datenblatt auf +/-40mA datiert ist, >ist dies wohl auch in erster Näherung der maximal zulässige Strom über >die jeweilige Schutzdiode. Was haben die Schutzdioden mit den Strömen des Ports zu tun? Das sind komplett zwei paar Schuhe. MfG Spess
spess53 schrieb: > Was haben die Schutzdioden mit den Strömen des Ports zu tun? Das sind > komplett zwei paar Schuhe. Nun ja, wenn ein I/O-Pin auf Eingang geschaltet wird, also hochohmig ist, welchen Weg sollen dann die 40mA nehmen?
Hi >Nun ja, wenn ein I/O-Pin auf Eingang geschaltet wird, also hochohmig >ist, welchen Weg sollen dann die 40mA nehmen? Im zulässigen Eingangsspannungsbereich können bei einem Eingang keine 40mA fliessen. Da liegt der Eingangsstrom im µA-Bereich. MfG Spess
spess53 schrieb: > Im zulässigen Eingangsspannungsbereich können bei einem Eingang keine > 40mA fliessen. Da liegt der Eingangsstrom im µA-Bereich. Richtig, deshalb nahm ich ja (fälschlicherweise) an, daß der übrige Strom per interner Schutzdioden abgeleitet wird. Ich nahm jedoch an, daß sich folgende Formulierung in den "Absolute Ratings" des mega8 DC Current per I/O Pin .........................................40.0 mA auf den jeweiligen Pin und nicht auf die jeweiligen Ausgangstransistoren bezieht. Mittlerweile habe ich in der Application Note "AVR182: Zero Cross Detector" auf Seite 4 oben folgenden Satz zur Kenntnis nehmen müssen: "It is not recommended that the clamping diodes are conducting more than maximum 1 mA and ..." Fazit: Der AVR kann bei direktem Anschluß an eine RS232 außerhalb der Spezifikationen betrieben werden und dadurch Schaden erleiden. Mit einem Serienwiderstand in den Signalleitungen kann dies jedoch wieder gerade gebogen werden. Rmin= (15V-Vcc)/1mA= 1000R für Vcc= 5V in der Eingangsleitung Rmin= 5V/40mA= 125R in der Ausgangsleitung Bin ich jetzt wieder innerhalb der Spezifikation des AVR? screwdriver
screwdriver schrieb:
> Rmin= (15V-Vcc)/1mA= 1000R für Vcc= 5V in der Eingangsleitung
Sollte heißen:
Rmin= (15V-Vcc)/1mA= 10K für Vcc= 5V in der Eingangsleitung
Hi
>Das Datenblatt aber schon.
Vielleicht habe ich das was überlesen. Aber in der AppNote AVR040 steht,
das Eingangsspannungen außerhalb des zulässigen Berichs (-0.5V to
VCC+0.5V) die Schutzdioden ohne Strombegrenzung zerstören können.
MfG Spess
Hi
>Bin ich jetzt wieder innerhalb der Spezifikation des AVR?
Nein. Die 40mA sind kein Betriebswert. Das ist der Strom der
kurzzeitig nicht zur Beschädigung führt. Also kein Rechenwert.
Zitat: 'Exposure to absolute maximum rating conditions for extended
periods
may affect device reliability.
Aus dem Text neben dem 'Absolute Maximum Ratings'-Kästchen.
Außserdem müssen noch die maximalen Ströme pro Port und pro
Betriebsspannungs-/Masse-Pin beachtet werden.
MfG Spess
spess53 schrieb: > Nein. Die 40mA sind kein Betriebswert. Das ist der Strom der > kurzzeitig nicht zur Beschädigung führt. Also kein Rechenwert. Also schön, laut DC (!) Characteristics: VOH >= 4.2V für IOH = -20 mA und VCC = 5V Rmin= 4.2/20mA= 210R Bin ich jetzt für die Ausgangsleitung konform?
@spess: Oder andersherum gefragt: Angenommen, du hättest die Aufgabe ein Signal mit einer Frequenz von 9600Hz mit einem Spannungsbereich von -15V/15V Vpp, Innenwiderstand der Signalquelle sei unbekannt, an einen Eingang eines AVR zu adaptieren. Wie würde deine Adaptionschaltung aussehen? (Und sag jetzt bitte nicht, du würdest einen MAX232 nehmen!) screwdriver
hey Leute, ich bin hier als Anfänger und habe ich die Platine des AVR-Lehrbuch von Roland Walter aufgebaut und jetzt wollte ich die seriellschnittstelle kontrollieren ob man daten zwischen PC und Mikrocontroller umtauschen kann oder nicht und zwar eine kleine HALLO auf Hterm sehen will aber klappt nict und auch auf Avrterm klappt nicht ich weisse nicht waron liegt das. #include <avr/io.h> #include <avr/iom8.h> #include <stdint.h> #define F_CPU 3686400 #define UART_BAUD_RATE 9600 int main() { do { printf("Hallo"); } while(1); return 0; } ich brauche wirklich ihre hilfe. ich bedanke mich im voraus.
Hi >Angenommen, du hättest die Aufgabe ein Signal mit einer Frequenz von >9600Hz mit einem Spannungsbereich von -15V/15V Vpp, Innenwiderstand der >Signalquelle sei unbekannt, an einen Eingang eines AVR zu adaptieren. Meinst du 9600 Baud oder wirklich 9600 Hz. Bei ersteren wären es nämlich maximal 4800 Hz ($55/$AA). Wenn du deine Widerstandsvariante meinst, wird der Wert nach unten durch den zulässigen Strom durch die Schutzdioden begrenzt. Die zur Berechnug anzusetzende Spannung ist 14,5V (negative Spannung- 0,5V Durchflussspannung). Ergibt bei 1mA Rmin=14,5K. Nach oben wird der Widerstand durch die Eingangskapazität (ca. 10pF) begrenzt. Der bildet mit dem Widerstand ein RC-Glied. Und das führt durch die Schmitt-Trigger-Charkteristik des Eingangs je nach L oder H zu unterschiedlich langen Bitzeiten. Im Bereich von ca. 50k ist das noch ziemlich unkritisch. was dann auch mein Wahl wäre 47k oder 51k. >(Und sag jetzt bitte nicht, du würdest einen MAX232 nehmen!) Doch. Meist will ich nicht nur Empfangen, sondern auch Senden. Und da bevorzuge ich solide Lösungen. @yassine Kenne mich in C nicht so richtig aus. Sollte aber nicht auch dort die UART initialisiert werden. Sieh mal im Tutorial nach. MfG Spess
spess53 schrieb: > Meinst du 9600 Baud oder wirklich 9600 Hz. Bei ersteren wären es nämlich > maximal 4800 Hz ($55/$AA). Stimmt. Hab das so noch nicht betrachtet. Danke auch für dein Rechenbeispiel. Ich habe mich bei meiner Berechnung auf die Schutzdiode gegen Vcc bezogen. Der größere Strom fließt jedoch gegen Masse. Bezgl. RC-Glied: Interessant, ich hab sowas bis jetzt immer rein ohmisch betrachtet. spess53 schrieb: > Doch. Meist will ich nicht nur Empfangen, sondern auch Senden. Und da > bevorzuge ich solide Lösungen. Voll d'accord. Sehe ich auch so. Als Hobbybastler hängt an der Uart meiner AVR i.d.R. ein MAX485, weil ich einen kleinen Hausbus betreibe. Die von mir beschriebene Variante ist, wie ich in meinem ersten Post auch schrieb, nur eine temporäre Notlösung zum Debuggen - auch wenns Pfusch ist. Aber ich werde mich bessern. Frohes Fest! Und besonderen Dank an alle, die durch ihr unermüdliches Mitwirken in diesem Forum, sei es durch Codebeispiele oder Postings, uns Anfängern und Hobbybastlern zur Seite stehen. Macht bitte weiter so. screwdriver
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.