Forum: Mikrocontroller und Digitale Elektronik USART Problem. Es werden nicht die richtigen Daten übertragen


von Jan N. (jan_n497)


Lesenswert?

Guten Abend,
Ich programmiere mich zurzeit in denn USART des ATMega328P ein. Und habe 
ein Problem. Und zwar wie man unten im Code sehen kann wir über UDR0 = 
'H'; ein "H" gesendet. Nur dieses kommt als . im Arduino Serial Monitor 
wieder und in HTerm kommt es als kleiner Kasten wieder.
Um die Daten zu Empfangen nutze ich ein USB zu TTL Konverter(PL2303HX).
Baudraten sind richtig eingestellt. Auch in vielen Youtube Videos wie 
fast denn gleichen Code haben, also auch über UDR0 = 'XXX'; senden kommt 
in dem Terminal das richtige an.
Was mache ich denn falsch?
1
#define F_CPU 16000000UL
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
#define BAUD 9600
7
#define UDR_Value = ((F_CPU / 16 / BAUD) - 1)
8
9
int main(void){
10
  
11
  UBRR0H = (UDR_Value>> 8);
12
  UBRR0L = UDR_Value;
13
  
14
  UCSR0C = (1<<UCSZ01) | (1<<UCSZ00);
15
  UCSR0B = (1<<RXEN0) | (1<<TXEN0);
16
  
17
    while (1) {
18
    UDR0 = '8';
19
    _delay_ms(2500);
20
    
21
    }
22
}

Kann mir da einer helfen?
Mfg Jan Niehues .

von Wolfgang (Gast)


Lesenswert?

Jan N. schrieb:
> Baudraten sind richtig eingestellt.

Und sendet der ATMega328P auch mit der eingestellten Baudrate?
Mit welchem CPU-Takt läuft dein ATMega328P?
Wie stehen die Fuses von deinem ATMega328P?
Hast du den Diodenblinktest gemacht?

Versuch mal auf dem PC mit 1200Bd zu empfangen.

von Stefan F. (Gast)


Lesenswert?

Lass mal in der Hauptschleife eine LED an mit blinken und prüfe ihre 
Frequenz.
1
    DDRB=1; // Led an PB0 und GND
2
3
    while (1) 
4
    {
5
       UDR0 = '8';
6
        _delay_ms(2400);
7
       PORTB |= 1;
8
       _delay_ms(100);
9
       PORTB &= ~1;
10
    }

Die LED muss alle 2,5 Sekunden regelmäßig blitzen.

Wenn nicht, dann stimmt F_CPU nicht, oder die Fuse CLK/8 ist falsch 
gesetzt oder der Quarz schwingt nicht richtig (falsche Kondensatoren?) 
oder die Fuses für die Taktquelle sind falsch eingestellt.

Nachtrag: Manno, Wolfgang war schneller :-)

von Frage (Gast)


Lesenswert?

Hallo,

ich würde eine der vielen Uart Libs mit Fifo verwenden.
U.a. von Peter Dannegger (peda) geschrieben.

Bevor man etwas in das Register UDR0 schreibt, sollte man testen, dass 
man das auch darf !
D.h. ober der vorherige Sendevorgang schon beendet ist.

Wie steht im Datenblatt und Infos findet man bei den Register zum Uart0.

von Jan N. (jan_n497)


Lesenswert?

Wolfgang schrieb:
> Und sendet der ATMega328P auch mit der eingestellten Baudrate?
> Mit welchem CPU-Takt läuft dein ATMega328P?
> Wie stehen die Fuses von deinem ATMega328P?
> Hast du den Diodenblinktest gemacht?
>
> Versuch mal auf dem PC mit 1200Bd zu empfangen.

Zu Frage 1) Wie kann ich denn sowas überprüfen
Zu Frage 2) Er läuft mit 16 Mhz Quarz.
Zu Frage 3) Fuses?? Ich programmiere ja mein Atmega328p über das Arduino 
UNO und dann auf ein Breadboard(RESET an RESET, +5 Volt an + Linie, 0 
Volt an - Linie, und RX und TX an die Pins des Atmega328ps.
Zu Frage 4) Wie genau, soll ich diesen Test machen? Mit _delay_ms(500); 
und dann Led an und dann wieder aus und dazwischen halt _delay_ms???
Also falls du das so meinst blinkt die LED jede Sekunde 1 mal

5) Ich habe alle durchprobiert es kommen andere Zeichen an hauptsächlich 
dieses kleine Rechteck

von Jan N. (jan_n497)


Lesenswert?

Stefan U. schrieb:
> Die LED muss alle 2,5 Sekunden regelmäßig blitzen.
>
> Wenn nicht, dann stimmt F_CPU nicht, oder die Fuse CLK/8 ist falsch
> gesetzt oder der Quarz schwingt nicht richtig (falsche Kondensatoren?)
> oder die Fuses für die Taktquelle sind falsch eingestellt.
>
> Nachtrag: Manno, Wolfgang war schneller :-)

Diese blink alle 2,5 Sekunden. Kann nicht genau sagen. Da ich das 
versucht habe mir der Stuppuhr zu machen. Aber sie blink immer 
regelmäsßig.

von Sebastian S. (amateur)


Lesenswert?

Welche harte Ware benutzt Du?

von Jan N. (jan_n497)


Lesenswert?

Sebastian S. schrieb:
> Welche harte Ware benutzt Du?

Was meinst du damit? Kann dir da grade nicht folgen

von Stefan F. (Gast)


Lesenswert?

Er wollte wissen, welche Hardware (Bauteile) du verwendest.

Du nimmst eine Stoppuhr (dein Smartphone) und misst die Zeit für 10 
Blinker. Das müssen dann zusammen 25 Sekunden ergeben.

Jedenfalls, wenn die LED wirklich alle 2,5 Sekunden blinkt, dann stimmt 
die Taktfrequenz. Was meinst du damit, dass du es nicht genau messen 
kannst?

> Bevor man etwas in das Register UDR0 schreibt, sollte man testen,
> dass man das auch darf !

Er wartet 2,5 Sekunden nach jeden Zeichen! Das ist wie mehr als 
ausreichend. Dieser Test ist in diesem einfachen Programm nicht nötig. 
Lass uns mal lieber die Problemursache finden.

von Sebastian S. (amateur)


Lesenswert?

Na welche Hardware Du benutzt.
Ist es ein Eigenbau? Dann könnte ein Schaltbild helfen. Du wärst nicht 
der Erste, der sich da vertan hat.
Ist ein fertiges Teil, so könntest Du den Namen verraten. Das hilft 
beim: "Mach doch folgendes" oder so.
Muss aber nicht sein...

von Jan N. (jan_n497)


Lesenswert?

Sebastian S. schrieb:
> Na welche Hardware Du benutzt.
> Ist es ein Eigenbau? Dann könnte ein Schaltbild helfen. Du wärst nicht
> der Erste, der sich da vertan hat.
> Ist ein fertiges Teil, so könntest Du den Namen verraten. Das hilft
> beim: "Mach doch folgendes" oder so.
> Muss aber nicht sein...

Selbst gebaut. Es ist zurzeit nix angeschlossen aus folgende Bauteile:
- Atmega328p(logisch)
- Vcc und GND
- Avcc, AGND, und 100nf an AREF(Ich habe die anderen Bauteile nur von 
ein anderen Projekt entfernt)
- Quarz 16 mz an Pin 9 und 10 und dazu noch 22 PF Kondensator(Gegen auf 
minus)
Und dann nur noch der Umwandler auf 9Volt Batterie auf 5 Volt(Also 
Festspannungsregler, Diode, 100 uf und 10uF Elkos) Werden aber nicht 
beansprucht ist nur für die Externe Spannungsversorgung da.

Ich programmiere mein CHip über AVRdude(Arduino UNO board) dann RX, TX, 
RESET, 5 Volt und GND an mein Breadboard zur Übertragung.

von Stefan F. (Gast)


Lesenswert?

Du könntest das Kabel zum PC mal vom AVR trennen und dort einfach RxD 
mit TxD verbinden. Dann schau nach, ob die Zeichen, die du ins 
Terminalprogramm eintippst, als echo zurück kommen.

Wenn das nicht klappt, ist dein serieller Port (bzw USB Adapter) defekt.

von Stefan F. (Gast)


Lesenswert?

Male mal bitte deine seriellen Verbindungen auf oder mache ein Foto.

Ich ahne, dass du deine seriellen Leitungen doppelt belegt hast (durch 
den µC des Arduino Uno und deinen einzelnen Chip).

von Michael U. (amiga)


Lesenswert?

Hallo,

ich habe Deinen Code mal in die IDE kopiert.

#define UDR_Value = ((F_CPU  16  BAUD) - 1)

hier wird zu Recht das = bemeckert.

Nach entfernen compiliert es und sendet brav alle 2,5s eine 8.

PS: ein 'H' konnte es nicht werden, Du sendest ja eine '8'...

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Jan N. (jan_n497)


Lesenswert?

Stefan U. schrieb:
> Ich ahne, dass du deine seriellen Leitungen doppelt belegt hast (durch
> den µC des Arduino Uno und deinen einzelnen Chip).

Also ich programmeire mit dem Arduino Board. Dann schließe ich das Ab 
und dann schließe ich denn Apdater an und empfange das Singal damit.

Das UNO board wird nur fürs Programmieren genutzt.

Stefan U. schrieb:
> Du könntest das Kabel zum PC mal vom AVR trennen und dort einfach RxD
> mit TxD verbinden. Dann schau nach, ob die Zeichen, die du ins
> Terminalprogramm eintippst, als echo zurück kommen.
>
> Wenn das nicht klappt, ist dein serieller Port (bzw USB Adapter) defekt.

Nope. Wenn ich RX und TX nicht "kurzschließe" also die Kontakte 
zusammenhalte und dann ins Terminal eine acht eingebe erscheint nur die 
ich eingegeben habe. Wenn ich die aber zusammen halte also das die 
Kontakte sich berühren. Dann kommt die acht noch mal wieder also so 88 
die erste acht habe ich eingeben und die zeit kommt durch Echo zurück

von Jan N. (jan_n497)


Lesenswert?

Michael U. schrieb:
> #define UDR_Value = ((F_CPU  16  BAUD) - 1)
>
> hier wird zu Recht das = bemeckert.
>
> Nach entfernen compiliert es und sendet brav alle 2,5s eine 8.
>
> PS: ein 'H' konnte es nicht werden, Du sendest ja eine '8'...

"=" das hatte ich danach auch noch verbessert. Aber die acht kommt bei 
mir nicht an. Oder gibt es irgendwie was mit Treiber oder so?? Muss man 
dafür irgendwas installieren?

von Walter S. (avatar)


Lesenswert?

Jan N. schrieb:
> Nope. Wenn ich RX und TX nicht "kurzschließe" also die Kontakte
> zusammenhalte und dann ins Terminal eine acht eingebe erscheint nur die
> ich eingegeben habe. Wenn ich die aber zusammen halte also das die
> Kontakte sich berühren. Dann kommt die acht noch mal wieder also so 88
> die erste acht habe ich eingeben und die zeit kommt durch Echo zurück

deine Ausführungen sind etwas wirr,
aber die erste 8 wird von deinem Terminlaprogramm ausgegeben,
die zweite 8 ist die Antwort die über die kurzgeschlossenen RX/TX zurück 
kommt.

von Stefan F. (Gast)


Lesenswert?

Mess mal die Leerlaufspannung am TxD Anschluss deines USB/seriell 
Kabels.

Der µC sollte ungefähr mit der gleichen Spannung versorgt werden. Oder 
du kümmerst dich um einen geeigneten Pegelwandler.

von Walter S. (avatar)


Lesenswert?

Jan N. schrieb:
> - Vcc und GND
> - Avcc, AGND, und 100nf an AREF

da fehlen 100nF an Vcc und Avcc

von Jan N. (jan_n497)


Lesenswert?

Stefan U. schrieb:
> Mess mal die Leerlaufspannung am TxD Anschluss deines USB/seriell
> Kabels.
>
> Der µC sollte ungefähr mit der gleichen Spannung versorgt werden. Oder
> du kümmerst dich um einen geeigneten Pegelwandler.

3,33 Volt wenn ich mein Multimeter an GND des Apdaters und an TXD 
anschließe.

von Jan N. (jan_n497)


Lesenswert?

Walter S. schrieb:
> da fehlen 100nF an Vcc und Avcc

hatte ich bis jetzt noch nie dort dran. Sind diese notwendig?

von Sebastian S. (amateur)


Lesenswert?

Entweder Deine Hardwarebeschreibung ist unvollständig oder Du brauchst 
tatsächlich keinen Pegelwandler...

von Walter S. (avatar)


Lesenswert?

Jan N. schrieb:
> 3,33 Volt wenn ich mein Multimeter an GND des Apdaters und an TXD
> anschließe.

dann solltest du ein Adapter mit 5V besorgen

von Michael U. (amiga)


Lesenswert?

Hallo,

Jan N. schrieb:
> "=" das hatte ich danach auch noch verbessert. Aber die acht kommt bei
> mir nicht an. Oder gibt es irgendwie was mit Treiber oder so?? Muss man
> dafür irgendwas installieren?

kann ich jetzt nur mit "keine Ahnung" antworten. Bin zwar kein Freund 
der Profilic-USB-Chips, aber da der Echo-Test ja geht sollten die 
Treiber ok sein.

TX/RX und GND auch wirklich sauber zum AVR verbunden?

Ich habe Deinen Source direkt in der ArduinoIDE compiliert und auf einem 
Arduino Nano (der hat einen CH340 als USB-Chip drauf) geflasht und mit 
dem Serial-Monitor der IDE nachgeschaut.

Deine 8-ten kommen aber in TeraTerm auch gut an.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Jan N. (jan_n497)


Lesenswert?

Walter S. schrieb:
> dann solltest du ein Adapter mit 5V besorgen

Ich habe diesen:
http://www.amazon.de/gp/product/B00R76SCJ6/ref=s9_simh_gw_p147_d0_i1?pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=desktop-1&pf_rd_r=10XGF6CKFR5K79JK02AN&pf_rd_t=36701&pf_rd_p=585296347&pf_rd_i=desktop

Die Spannung am TXD Pin liegt bei 3,33 Volt. Die Spannungs am Roten 
Kabel liegt bei 5,02 Volt

Michael U. schrieb:
> TX/RX und GND auch wirklich sauber zum AVR verbunden?

Ich weis ja nicht ob das so richtig ist aber, RX heißt ja Receiving Data 
und TX ja Transmitting Data
Und wenn ich RX an RX am Atmega328p anschließe und TX an TX dann kommt 
nix an erst wenn ich RX an TX am Atmega328p also das rx Kabel an denn tx 
pin des Arduino dann kommt auch ein Signal an.

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

ist ok so.
Logisch, daß zwei verbundene TX keinen Sinn machen, da prügeln sich 
höchstens die Ausgangstreiber miteinander.

Mir ging es auch eher um die GND-Verbindung.

Gruß aus Berlin
Michael

von Walter S. (avatar)


Lesenswert?

Jan N. schrieb:
> Ich habe diesen:
> 
http://www.amazon.de/gp/product/B00R76SCJ6/ref=s9_simh_gw_p147_d0_i1?pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=desktop-1&pf_rd_r=10XGF6CKFR5K79JK02AN&pf_rd_t=36701&pf_rd_p=585296347&pf_rd_i=desktop

der hat 5V, aber komisch dass du 3V misst

Jan N. schrieb:
> Und wenn ich RX an RX am Atmega328p anschließe und TX an TX dann kommt
> nix

das ist auch falsch, denn
der Sendeausgang TX muss an einen Empfangseingang RX
und umgekehrt

von Jan N. (jan_n497)


Lesenswert?

Michael U. schrieb:
> Mir ging es auch eher um die GND-Verbindung.

Verstehe ich nicht. Gemessen habe ich Schwarze Messnadel an Schwarzes 
Kabel und Rote Messspitze an Grünes Kabel.

Walter S. schrieb:
> 
http://www.amazon.de/gp/product/B00R76SCJ6/ref=s9_simh_gw_p147_d0_i1?pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=desktop-1&pf_rd_r=10XGF6CKFR5K79JK02AN&pf_rd_t=36701&pf_rd_p=585296347&pf_rd_i=desktop
>
> der hat 5V, aber komisch dass du 3V misst
>
> Jan N. schrieb:
>> Und wenn ich RX an RX am Atmega328p anschließe und TX an TX dann kommt
>> nix
>
> das ist auch falsch, denn
> der Sendeausgang TX muss an einen Empfangseingang RX
> und umgekehrt

Ich messe 5 Volt an dem Roten Kabel(Vcc) und 3,33 Volt an dem Grünen 
Kabel(TXD)
Das ich denn RX(Weiß) anschluß an denn TX Pin des Atmega anschließen 
muss, wahr mir spätenes klar wo ich selber mal im Kopf die schaltung 
durchgangen bin. Transmitter an Transmitter Pin ergibt kein Sinn 
Transmitter PIn an Empfänger ergab schon mehr sinn.

von Michael U. (amiga)


Lesenswert?

Hallo,

die 3V am TX des Profilic sind nicht ungewöhnlich, die CP2102 mache auch 
nur 3,3V TX-Pegel und laufen an 3,3V und 5V Sytemen ohne Probleme.

Ich habe gerade mal ins Datenblatt des PL2303HX geschaut: RXD scheint 
NICHT 5V-tolerant zu sein. Bau mal einen Spannungsteiler an TX des 
Mega328.
1:2 sollte passen, also 1k längs und 2,2k gegen GND und den TXD des 
Profilic an die Verbindung der Widerstände.

Wäre zumindest eine Erklärung.

Gruß aus Berlin
Michael

von Jan N. (jan_n497)


Lesenswert?

Michael U. schrieb:
> Bau mal einen Spannungsteiler an TX des
> Mega328.
> 1:2 sollte passen, also 1k längs und 2,2k gegen GND und den TXD des
> Profilic an die Verbindung der Widerstände.

Öhhh, sowas habe ich noch nie genau... Wie geht denn sowas?

von Michael U. (amiga)


Lesenswert?

Hallo,

oh man, ein paar Grundlagen sollte man sich schon aneignen und 
Spannungsteiler gehören wie das Ohmsche Gesetz sicher dazu...

Wenn Du 2 Widerstände in Deinen Vorräten findest, die ca. im Verhältnis 
1:2 sind, also 1k/2,2k oder 2,2k/4,7k oder... (maximal 10/20k, wird 
sonst zu hochohmig): beide in Reihe schalten. Den mit dem kleineren Wert 
an den TX-Pin des AVR, den anderen an GND. RX vom USB-Adapter an die 
Verbindung der beiden Widrstände und mal testen, ob es hilft.

Gruß aus Berlin
Michael

von Tom (Gast)


Lesenswert?

Jan N. schrieb:
> Walter S. schrieb:
>> da fehlen 100nF an Vcc und Avcc
>
> hatte ich bis jetzt noch nie dort dran. Sind diese notwendig?

Und ob die notwendig sind.

von Jan N. (jan_n497)


Angehängte Dateien:

Lesenswert?

Michael U. schrieb:
> oh man, ein paar Grundlagen sollte man sich schon aneignen und
> Spannungsteiler gehören wie das Ohmsche Gesetz sicher dazu...
>
> Wenn Du 2 Widerstände in Deinen Vorräten findest, die ca. im Verhältnis
> 1:2 sind, also 1k/2,2k oder 2,2k/4,7k oder... (maximal 10/20k, wird
> sonst zu hochohmig): beide in Reihe schalten. Den mit dem kleineren Wert
> an den TX-Pin des AVR, den anderen an GND. RX vom USB-Adapter an die
> Verbindung der beiden Widrstände und mal testen, ob es hilft.
>
> Gruß aus Berlin
> Michael

Wäre das so richtig wie in der Zeichung?

Falls ja werde ich es mal morgen ausprobieren.

Tom schrieb:
> Und ob die notwendig sind.

Werde mal morgen welche dran hängen

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jan N. schrieb:
> Tom schrieb:
>> Und ob die notwendig sind.
> Werde mal morgen welche dran hängen
Tom meint übrigens von Vcc zum nächsten GND Pin und vom AVcc auf 
kürzestem Weg zum AGND. Dein Stichwort für die Google-Suche ist 
"Blockkondensator".

Und sieh dir auch den Spannungsteiler nochmal an. Der stimmt noch nicht. 
Du hast da jetzt einen Kurzschluss zwischen RX und GND...

: Bearbeitet durch Moderator
von Jan N. (jan_n497)


Lesenswert?

Lothar M. schrieb:
> Du hast da jetzt einen Kurzschluss zwischen RX und GND

Da das sehe ich auch grade.

"Den mit dem kleineren Wert
an den TX-Pin des AVR, den anderen an GND. RX vom USB-Adapter an die
Verbindung der beiden Widrstände und mal testen, ob es hilft."

Also mit dem 1K Ohm widerstand an denn TX Pin des Atmegas und der 2,2 k 
Ohm geht an GND. Aber wo muss jetzt der RX Anschluss ran? Zwischen die 
beiden Widerstände?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jan N. schrieb:
> Aber wo muss jetzt der RX Anschluss ran? Zwischen die beiden
> Widerstände?
Ja.
Siehe Spannungsteiler: Ue ist am USB Konverter, Ua ist am RX.

von Tom (Gast)


Lesenswert?

Jan N. schrieb:
> Walter S. schrieb:
>> da fehlen 100nF an Vcc und Avcc
>
> hatte ich bis jetzt noch nie dort dran. Sind diese notwendig?

JA, sonst spinnt der Controller gerne mal und man sucht sich tot nach 
myseriösen Fehlern.

von Jan N. (jan_n497)


Lesenswert?

Lothar M. schrieb:
> Ue ist am USB Konverter, Ua ist am RX.

https://www.mikrocontroller.net/articles/Datei:St_einfach.png

U_EIN dort kommt dort das RXD Kabel meines Apdaters ran. Und bei U_AUS 
geht der zum TX Pin des ATmega328p Oder?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Michael U. schrieb:
> Ich habe gerade mal ins Datenblatt des PL2303HX geschaut: RXD scheint
> NICHT 5V-tolerant zu sein. Bau mal einen Spannungsteiler an TX des
> Mega328.
Machs einfach so:
1
        TX ----1k-----o------ RX
2
                      |
3
 ATmega              2k2          Prolific
4
                      |
5
       GND -----------o------ GND

von Walter S. (avatar)


Lesenswert?

Michael U. schrieb:
> Ich habe gerade mal ins Datenblatt des PL2303HX geschaut: RXD scheint
> NICHT 5V-tolerant zu sein.

aber der verwendete Adapter ist als TTL kompatibel angegeben

von Michael U. (amiga)


Lesenswert?

Hallo,

Walter S. schrieb:
> Michael U. schrieb:
>> Ich habe gerade mal ins Datenblatt des PL2303HX geschaut: RXD scheint
>> NICHT 5V-tolerant zu sein.
>
> aber der verwendete Adapter ist als TTL kompatibel angegeben

Ich traue ja nur dem Frieden nicht und habe nicht geahnt, daß der Wunsch 
mit dem Spannungsteiler solche Probleme aufwirft.
Man hätte eben in 5 Minuten diesen Punkt ausschliessen können, wenn es 
sich mit genauso verhält.

Ich habe zwar irgendwo noch einen Profilic-Adapter, der hat aber einen 
älteren Chip und keine Win7 Treiber.

Gruß aus Berlin
Michael

von Stefan F. (Gast)


Lesenswert?

> aber der verwendete Adapter ist als TTL kompatibel angegeben
Das ist falsch.

von Jan N. (jan_n497)


Lesenswert?

Und weis heißt das jetzt?
Das es am Apdater liegt?

von Stefan F. (Gast)


Lesenswert?

Ich sag mal so:

Du hast einen Adapter, der nur 3,3V veträgt mit einem µC verbunden, der 
5V hat. Es liegt also an Dir.

Dass der USB/seriell Adapter noch funktioniert, hast du bereits 
festgestellt.

Nächster Schritt ist, ihn mit Pegelwandler korrekt einzusetzen oder 
durch einen anderen zu ersetzen, der für 5V vorgesehen ist.

Und dann wird deine Anwendung warscheinlich auch funktionieren.

von Jan N. (jan_n497)


Lesenswert?

Stefan U. schrieb:
> Ich sag mal so:
>
> Du hast einen Adapter, der nur 3,3V veträgt mit einem µC verbunden, der
> 5V hat. Es liegt also an Dir.
>
> Dass der USB/seriell Adapter noch funktioniert, hast du bereits
> festgestellt.
>
> Nächster Schritt ist, ihn mit Pegelwandler korrekt einzusetzen oder
> durch einen anderen zu ersetzen, der für 5V vorgesehen ist.
>
> Und dann wird deine Anwendung warscheinlich auch funktionieren.

Jo danke dir. Werde heute mal im Elektronik Shop mit einen anderen 
Kaufen der auch 5 Volt Kompatibel ist. Und nicht nochmal so ein scheiß 
aus dem Internet. Sorry für das Wort. Aber wenn dort steht "5 Volt" dann 
gehe ich auch davon das er 5 Volt hat. Ich werde dieses Produkt 
zurückschicken. Und mir wie gesagt im Elektro Shop ein anderes Kaufen

Mfg jan.

von Stefan F. (Gast)


Lesenswert?

Ich benutze seit Jahren so ein Kabel an 5V Mikrocontroller, indem ich 
einfach Widerstände in Reihe schalte. So habe ich vollen Schutz gegen 
Verpolung.

[code]

Prolific Kabel                     AVR
                  2,2k
RxD o-------------[===]-------------o TxD

                  2,2k
TxD o-------------[===]-------------o Rxd

                  100 Ohm
GND o-------------[===]-------------o GND
[code]

Die Widerstände dienen zugleich als Stecker für das Steckbrett: 
http://stefanfrings.de/avr_hello_world/DSCF0440.JPG

von Jan N. (jan_n497)


Lesenswert?

Stefan U. schrieb:
> code]
>
> Prolific Kabel                     AVR
>                   2,2k
> RxD o-------------[===]-------------o TxD
>
>                   2,2k
> TxD o-------------[===]-------------o Rxd
>
>                   100 Ohm
> GND o-------------[===]-------------o GND
> [code]
>
> Die Widerstände dienen zugleich als Stecker für das Steckbrett:
> http://stefanfrings.de/avr_hello_world/DSCF0440.JPG

Wenn ich das so mache an RXD 2,2 k und dann an TX Pin des Avr 
controllers und 100 Ohm an GND mache. Also 2,2 k Ohm in die Buchse des 
RXD Kabel und dann mit dem Widerstand an TX Pin und 100 Ohm in die GND 
Buchse des Apdaters und dann in die - Leitung dann passiert garnix mehr 
die LED blinkt zwar. Aber in HTerm kommen  keine Daten mehr an. Wenn ich 
die 100 Ohm weg machen dann kommen wieder diese komischen Zeichen an

von Jan N. (jan_n497)


Lesenswert?

Könnte es auch was mit dem Avrdude Programmer zutun haben?

Denn ich nutze ja ein 16 Mhz Quarz. Wenn ich im Code 8 mhz einstelle und 
auch ein 8 mhz quarz dran hänge kommt nur "avrdude: avrdude 
stk500_getsync() not in sync resp=0x00". So bald wieder ein 16 mhz quarz 
dran kommt, kommt dieser fehler nicht mehr.

Ich habe auch keine Ahnung wie ich diese Fuses beim Avrdude Programmer 
ändern kann.
Diese Command wird ausgeführt:

-u -v -patmega328p -carduino -PCOM6 -b115200 
-Uflash:w:"$(ProjectDir)Debug\$(TargetName).hex":i -C"C:\Program Files 
(x86)\Arduino\hardware\tools\avr\etc\avrdude.conf"

von Michael U. (amiga)


Lesenswert?

Hallo,

was ich im Moment nicht verstehe: Du scheinst doch die Arduion-Umgebung 
zu benutzen. Du hast also den Arduino-Bootloader auf Deinem Mega328?
Du flashst mit dem Profilic-USB-Adapter?

Ich hatte bisher noch keinen Grund, mir die Aufrufe des AVRdude genauer 
anzusehen, darum kümmert sich die IDE doch recht gut alleine, wenn man 
von dort flasht.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Jan N. (jan_n497)


Lesenswert?

Michael U. schrieb:
> Hallo,
>
> was ich im Moment nicht verstehe: Du scheinst doch die Arduion-Umgebung
> zu benutzen. Du hast also den Arduino-Bootloader auf Deinem Mega328?
> Du flashst mit dem Profilic-USB-Adapter?
>
> Ich hatte bisher noch keinen Grund, mir die Aufrufe des AVRdude genauer
> anzusehen, darum kümmert sich die IDE doch recht gut alleine, wenn man
> von dort flasht.
>
> Gruß aus Berlin
> Michael

Ich erkläre es mal:
- Ich habe mir damals ein Arduino UNO gekauft mit Atmega328P drauf.
- Dann bin ich ca. nach 2 Monaten von der Arduino IDE weg und zum Atmel 
Studio gegangen da ich schon ein paar C Vorkenntnisse hatte.
- Programmieren tute ich über das Arduino UNO board.
- Zum Empfangen des TX Signal nutze ich ein Apdater.

Kann es sein das es am Bootloader oder so liegt?

von Jan N. (jan_n497)


Lesenswert?

Die Apdater funktioniert definiert!

Ich habe grade in der Arduino IDE ein Serial Programm geschrieben und 
zwar mit: Serial.begin(9600);

und dann mit Serial.println("8"); die acht gesendet diese kommt ohne 
Probleme an.

Aber warum nicht in Atmel Studio. Liegt das vllt. an dem Arduino 
Bootloader? Oder doch an denn Fuses?

mfg jan

von Walter S. (avatar)


Lesenswert?

Stefan U. schrieb:
>> aber der verwendete Adapter ist als TTL kompatibel angegeben
> Das ist falsch.

kennst Du den Adapter, entspricht er nicht der Beschreibung?

von Stefan F. (Gast)


Lesenswert?

Ich kenne den Chip, dessen Datenblatt und setzte ihn selbst beim basteln 
ein.

von Michael U. (amiga)


Lesenswert?

Hallo,

kopiere doch einfach mal Deinen C-Code von oben in die Arduino-IDE in 
einen leeren Sketch. Natürlich alles löschen, was die IDE da 
reinschreibt (setup() und loop() usw.).

Dann einfach compilieren und testen.
Die IDE macht dann auch nichts anderes als das Atmel-Studio. Sie 
compiliert es mit dem GGC und flasht es.

Ich nehme an, Du hast einen UNO mit gesockeltem Mega. Dann steck den 
eben auf Deinen Aufbau und teste.

Ich habe im Moment keine Ahnung, wer da quer schießt.

Gruß aus Berlin
Michael

von Jan N. (jan_n497)


Lesenswert?

Michael U. schrieb:
> kopiere doch einfach mal Deinen C-Code von oben in die Arduino-IDE in
> einen leeren Sketch. Natürlich alles löschen, was die IDE da
> reinschreibt (setup() und loop() usw.).
>
> Dann einfach compilieren und testen.
> Die IDE macht dann auch nichts anderes als das Atmel-Studio. Sie
> compiliert es mit dem GGC und flasht es.
>
> Ich nehme an, Du hast einen UNO mit gesockeltem Mega. Dann steck den
> eben auf Deinen Aufbau und teste.
>
> Ich habe im Moment keine Ahnung, wer da quer schießt.
>
> Gruß aus Berlin
> Michael

Danke für denn Tipp.
Langsam wird es komisch.
Also der Fehler muss im Code liegen. Da wenn ich diesen Code in die 
Arduino IDE eingebe. Kommt genau das gleiche raus wenn ich es in Atmel 
Studio programmiere.(Der Mega steht im Sockel des Arduino ohne 
Breadboard)

Wenn ich aber mit Serial.begin(9600);
und Serial.println("H"); mache kommt dieses problemlos an.

von Jan N. (jan_n497)


Lesenswert?

ES funktioniert!!!!!!!!

Ich habe mir nochmal das Tutorial "Der UART" durchgelessen und habe denn 
"Double Transmission Speed" aktiviert mit
1
if(USE_2X) {
2
    UCSR0A |= (1<<U2X0);
3
}else{
4
    UCSR0A &= ~(1<<U2X0);
5
}

Und noch die util/setbaud.h Datei includieren

Und nun funktioniert es endlich sogar mit dem Apdater ohne Problem. 4 
Gott verdammt Tage damit verbraucht und dabei wahr der Fehler scheinbar 
so einfach.
Naja wieder was neues gelernt.

Ich danke euch für die Tatkräftige Unterstützung!!!

Mfg jan.

von Michael U. (amiga)


Lesenswert?

Hallo,

erstmal schön, daß es geht.
Eigentlich müßte man dieses Rätsel jetzt lösen...
Ich habe definitiv Deinen Code in die IDE kopiert (nur das '=' 
entfernt), compiliert und geflasht.

Es kann mit dem Bootloader zusämmenhängen, normalerweise ist U2X0 nach 
Reset
auf 0, also kein X2, ist bei 9600Baud eigentlich auch nicht nötig.
Er kann also eigentlich nur aus dem Bootloader mit gesetztem X2 
gestartet haben. Das ergünde ich aber nicht...
Eigentlich hättest Du die Daten dann mit 19200 richtig empfangen müssen.

Warum das bei Dir passiert ist und bei mir nicht, ist etwas unklar. Mein 
Bootloader ist der vom Auslieferzustand des Arduino Nano aus China, ich 
hatte bisher keinen Grund, da was zu ändern. Es läuft für mich ja.

Gruß aus Berlin
Michael

von Jan N. (jan_n497)


Lesenswert?

Michael U. schrieb:
> Hallo,
>
> erstmal schön, daß es geht.
> Eigentlich müßte man dieses Rätsel jetzt lösen...
> Ich habe definitiv Deinen Code in die IDE kopiert (nur das '='
> entfernt), compiliert und geflasht.
>
> Es kann mit dem Bootloader zusämmenhängen, normalerweise ist U2X0 nach
> Reset
> auf 0, also kein X2, ist bei 9600Baud eigentlich auch nicht nötig.
> Er kann also eigentlich nur aus dem Bootloader mit gesetztem X2
> gestartet haben. Das ergünde ich aber nicht...
> Eigentlich hättest Du die Daten dann mit 19200 richtig empfangen müssen.
>
> Warum das bei Dir passiert ist und bei mir nicht, ist etwas unklar. Mein
> Bootloader ist der vom Auslieferzustand des Arduino Nano aus China, ich
> hatte bisher keinen Grund, da was zu ändern. Es läuft für mich ja.
>
> Gruß aus Berlin
> Michael

Am Bootloader habe ich selber auch nix verändert. Das ist der Chip der 
beim UNO dabei kommt der hat ja bereits ein bootloader.
Du hast recht. Auf 19200 empfange ich auch die richtigen Daten ohne 
U2X0.
Keine Ahnung warum. Aber ob auf 19200 oder mit U2X0 und dann auf 9600 es 
funktioniert und darüber bin ich froh. :)

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.