Forum: Mikrocontroller und Digitale Elektronik Einfachstes serielles Hallo läuft nicht?


von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Hallo.

Das sind die Momente, wo man ab liebsten alles hinschmeissen möchte..

Hardware: ATmega328P mit 20MHz Quarz. Serielle Anbindung über einen
USB Dongle. Ich habe mit genau dieser Hardware eine andere Firmware 
geflasht, die etwas an der serielle Schnittstelle ausgibt = ok = 
Hardware läuft!
(9600 8N1)

Dann habe ich das Programm von hier:
http://hekilledmywire.wordpress.com/2011/01/05/using-the-usartserial-tutorial-part-2/

genommen. Bekomme partout keine serielle Ausgabe?
Habe auch mal den String mit PROGMEM in den Flash gelegt, weil ich nur 
die HEX geflasht habe. So ist der AVR geflasht:
avrdude -c usbtiny -p m328p -e -U flash:w:serial.hex
avrdude -c usbtiny -p m328p -U lfuse:w:0xf7:m -U hfuse:w:0xdf:m

Was ist da nur falsch..?

Peter

von Georg G. (df2au)


Lesenswert?

Wenn der String im Flash liegt, musst du ihn auch von dort holen. In 
PGMSPACE.H sind die dazu notwendigen Funktionen definiert.

von Peter S. (petersieg)


Lesenswert?

Hmm.. ok. Hatte es jetzt mal mit einem buffer im Ram und 
strcpy_P(buffer,String); probiert.. wieder/immer noch nichts.
---
Habe dann mal das alles Original belassen (ohne progmem) und auch den 
Eeprom Teil
geflasht:
avrdude -c usbtiny -p m328p -e -U flash:w:serial.hex
avrdude -c usbtiny -p m328p -e -U eeprom:w:serial.eep
avrdude -c usbtiny -p m328p -U lfuse:w:0xf7:m -U hfuse:w:0xdf:m

= nichts :-(

Peter

von Peter S. (petersieg)


Angehängte Dateien:

Lesenswert?

Hmm. Keine ne Idee..?

Peter

von Georg G. (df2au)


Lesenswert?

Tja... also... wenn ich die CPU Frequenz auf 16MHz ändere (weil der 
Quarz gerade im Board steckt) und das "PROGMEM" aus der String 
Deklaration entferne, alles compiliere und dann flashe, dann 
funktioniert es einwandfrei.

Wie soll ich dann weiter helfen?

von J.-u. G. (juwe)


Lesenswert?

Peter Sieg schrieb:
> Hardware: ATmega328P mit 20MHz Quarz.

Sind die Fuses so gesetzt, dass er auch mit diesem Quarz läuft?

von NoNo (Gast)


Lesenswert?

J.-u. G. schrieb:
> Peter Sieg schrieb:
>> Hardware: ATmega328P mit 20MHz Quarz.
>
> Sind die Fuses so gesetzt, dass er auch mit diesem Quarz läuft?

Hätte auch vermutet dass entweder der interne Oszillator oder der 
Clockdiv aktiv ist...

von Peter S. (petersieg)


Lesenswert?

Hallo.

Die Fuses hatte ich oben gepostet.
Die andere 'Testfirmware' läuft auch mit dem 20MHz Quarz und bringt
eine serielle Meldung am Terminal..

ratlos

Peter

von Georg G. (df2au)


Lesenswert?

Kannst du die "andere" Software posten? Dann kann man vielleicht den 
Unterschied sehen. Deine Flags sehen richtig aus.

Ansonsten schließe ich mich deiner Aussage an: Ratlos

von W.S. (Gast)


Lesenswert?

Peter Sieg schrieb:
> Das sind die Momente, wo man ab liebsten alles hinschmeissen möchte..

Das wäre in diesem Falle wohl auch das Beste. Du hast ne komische Art, 
Software füe uC zu schreiben.

Also:
ich hätte an deiner Stelle mir für solche Tasks wie serielle Ein- und 
Ausgaben eine Unit geschrieben, die das wirklich ausprobiertermaßen 
tut und die wenigstens ein bissel eigensicher ist. Schlimmes Beispiel 
von dir: dein Programm wartet sich tot beim Senden, wenn aus irgendeinem 
Grunde die "Sender-ist-frei" Kondition nicht kommt. Sowas würde ich 
zeitlich begrenzen und im Fehlerfalle wenigstens ins aufrufende Programm 
zurückspringen. Obendrein würde ich sowieso die ganze serielle I/O auf 
Buffer und Interrupts umstellen, damit das Ganze nicht blockierend ist.

OK, vielleicht sind die AVR's für sowas auch nur zu klein, aber selbst 
bei den ebenso kleinen PIC16Fxxx organisiere ich den seriellen I/O per 
Buffer und Interrupts. Das geht. Und wenn man es einmal wirklich gut 
ausgetestet hat, dann geht's immer wieder in allen folgenden Projekten.

Ansonsten kommen mir für dein Problem nur folgende Fragen:
- Power für UART eingeschaltet?
- Clock für UART freigegeben?
- Pins für UART richtig konfiguriert?
- UART aktiviert und richtig eingerichtet?
- eventuell konkurrierende Peripherie dediziert deaktiviert?

W.S.

von Spess53 (Gast)


Lesenswert?

Hi

Bei einem ATmega328P mit 20MHz Quarz:

>- Power für UART eingeschaltet?

kann man nicht abschalten

>- Clock für UART freigegeben?

Wird mit UBRR eingestellt

>- Pins für UART richtig konfiguriert?

Macht die UART selbst mit RXEN und TXEN

>- UART aktiviert und richtig eingerichtet?

Kann man an Hand des Datenblatts überprüfen

>- eventuell konkurrierende Peripherie dediziert deaktiviert?

Gibt es nicht.

Wie kann man eigentlich so viel Stuss erzählen?

@to

>Dann habe ich das Programm von hier:
>http://hekilledmywire.wordpress.com/2011/01/05/usi...
>...

>Was ist da nur falsch..?

Du liest kein Datenblatt.

MfG Spess

von Zonk (Gast)


Lesenswert?

> #define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1)
Da schon mal versucht herauszufinden, was das bedeutet? Wenn du das 
Makro nicht angepasst hast, dann hast du die falsche Baudrate.

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.