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.
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
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??
> 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).
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.
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