Einfachstes serielles Hallo läuft nicht?

OP #3140292
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
Angehängte Dateien:
OP #3140309
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
Gast #3143119
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.
Gast #3143150
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren