mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega8 und RS232


Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Haben nicht beide Anschlüsse 5V??

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es auch noch eine andere Möglichkeit??

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, mit OPVs die Spannungsbereiche umbauen. Ist aber etwas 
komplizierter, als nen MAX232 zu verbauen.

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man nicht direkt mit der USB-Schnittstelle kommunizieren??

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: screwdriver (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!
Das funktioniert wunderbar!
Ich habe es ohne die Widerstände versucht und es geht auch.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr seit vielleicht Pfuscher...

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich schrieb:
> Ihr seit vielleicht Pfuscher...

??

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>??

Weil Du den ATMega nun außerhalb der Absolute Maximum Ratings betreibst.

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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??

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Denny schrieb:

> Da stimmt irgendwas mit den Pegeln nicht.
> Was kann ich tun??

Nimm einen richtigen MAX232

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was kann ich tun??


Nimm einen Pegelwandler!

http://www.atmel.com/dyn/resources/prod_documents/...

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

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist, dass ich keinen hier habe.
Und wenn ich einen Bestelle dauert das mindestens eine Woche, bis ich 
den habe.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt bei RS bestellen, ist er morgen um diese zeit da.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@denny:
Zeig mal bitte deinen Programmcode und wie ist der mega8 angeschlossen?

screwdriver

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe jetzt einen MAX232.
Es funktioniert soweit.
Danke!

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ging jetzt aber schnell :-)

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
screwdriver schrieb:
> Sehe ich nicht so.

Das Datenblatt aber schon.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: yassine (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.