| |
 |
 |  | | UART Problem - es kommt immer nur 0xEF oder 0xFF an |
|  |
Verfasst am: 26.04.2010, 14:54 |
|
|
|
Hallo Leute!
Ich habe ein Problem mit meinem myAVR MK1 LPT:
Ziel des Programmes ist es, ein 'a' per UART an meinem PC zu senden. Dies entspricht dem ASCII-Code 097 (dezimal) bzw. 0x61 (hex).
Wenn ich mit HTerm gucke, was so am PC ankommt, kommt stehts 0xFF oder 0xEF oder so an, jedoch nie 0x61.
Ich habe ein wenig gegoogelt und herausgefunden, dass es evtl. daran liegt, dass ich kein externes Quarz benutze bzw. irgendwelche Fuses nicht gesetzt habe.
Da ich Anfänger bin, habe ich am Board jedoch nichts verändert, dass heisst alle Fuses etc. sind im Urzustand. Ist es notwendig, was am Board zu ändern, damit UART funktioniert?
Die Baudrate dürfte mit 2400 auch nicht zu hoch eingestellt sein; in HTerm habe ich natürlich die gleiche Baudrate eingegeben.
Hier der Code:
| Code: |
#include <avr/io.h>
#include <util/delay.h>
#ifndef F_CPU
#define F_CPU 1000000UL // Systemtakt in Hz - Definition als unsigned long beachten
#endif
#define BAUD 2400UL // Baudrate
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
#error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
#endif
int main(void)
{
UCSRB |= (1 << TXEN); // UART TX einschalten
UCSRC |= (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0); // Asynchron 8N1
UBRRH = UBRR_VAL >> 8;
UBRRL = UBRR_VAL & 0xFF;
while (!(UCSRA & (1 << UDRE))) /* warten bis Senden moeglich */
{}
UDR = 0x61;
return 0;
}
|
Vllt. kann jemand das Prog ja mal auf seinem Board testen!
Danke & Viele Grüße! |
|
|
|
|
 | |  |
Verfasst am: 26.04.2010, 19:53 |
|
|
| Berecke |
|
 |
 |
| Anmeldungsdatum: 13.11.2008 |
| Beiträge: 170 |
| Wohnort: Berlin |
|
|
 |
 |
 |
|
| Programm ist in Ordnung; läuft bei mir auf einen myAVR Board MK2 USB. Prüfe bitte die Fuse-Einstellungen mit dem Progtool. Low Fuse muss auf int RC 1MHz, Startup time 6CK+64ms stehen. Achtung! Die anderen nicht verstellen, wenn hier etwas falsch gemacht wird, kann der µC nur mit besonderen Massnahmen wiederbelebt werden. |
|
_________________ Gruß Berecke |
|
|
|
 | |  |
Verfasst am: 27.04.2010, 7:19 |
|
|
|
Hallo Berecke,
vielen Dank für deine Antwort und dass du mein Programm ausprobiert hast!
Leider kann ich mit ProgTool nicht arbeiten, da es auf giveio.sys zugreift, welche unter Vista64 nicht funktioniert.
Bisher habe ich mein Board immer mit einer selbst kompilierten Vista64-Version von avrdude beschrieben.
Damit habe ich jetzt auch die Fuses ausgelesen, kann mit dem Output aber nicht sehr viel anfangen:
| Code: | avrdude -pm8 -csp12 -Ulfuse:r:-:i
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e9307
avrdude: reading lfuse memory:
Reading | ################################################## | 100% 0.00s
avrdude: writing output file "<stdout>"
:01000000FF00
:00000001FF
avrdude: safemode: Fuses OK
avrdude done. Thank you.
|
und mit verbose:
| Code: | avrdude -pm8 -csp12 -v -Ulfuse:r:-:i
avrdude: Version 5.10, compiled on Apr 24 2010 at 12:52:53
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "D:\Entwicklung\myavrworkpadplus\WinA
VR\bin\avrdude.conf"
Using Port : lpt1
Using Programmer : sp12
AVR Part : ATMEGA8
Chip Erase delay : 10000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page
Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 4 20 128 0 no 512 4 0 9000 9000 0xff 0xff
flash 33 10 64 0 yes 8192 64 128 4500 4500 0xff 0x00
lfuse 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00
lock 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00
calibration 0 0 0 0 no 4 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : PPI
Description : Steve Bolt's Programmer
VCC = 4,5,6,7,8
BUFF = (not used)
RESET = 3
SCK = 2
MOSI = 9
MISO = 11
ERR LED = 0
RDY LED = 0
PGM LED = 0
VFY LED = 0
avrdude: AVR device not responding
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude done. Thank you.
|
Was mich wundert, ist das "AVR device not responding" im zweiten Output. Was hat das zu bedeuten?
Vielen Dank für eure Anmerkungen! |
|
|
|
|
 | |  |
Verfasst am: 27.04.2010, 20:24 |
|
|
| Berecke |
|
 |
 |
| Anmeldungsdatum: 13.11.2008 |
| Beiträge: 170 |
| Wohnort: Berlin |
|
|
 |
 |
 |
|
Kenne mich leider auch nicht mit dem AVRDUDE aus, aber die Fuse sollten wie folgt gesetzt sein:
lfuse 0x0E1
hfuse 0xD9
lock 0xFF
Bei Dir steht nichts drin
| Code: | lfuse 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00
lock 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00 |
bzw.:
| Code: | avrdude: writing output file "<stdout>"
:01000000FF00
:00000001FF |
Bei mir habe ich ausgelesen:
| Code: | avrdude: writing output file "<stdout>"
:01000000E1D9
:00000001FF |
Ich denke, die Fuse werden falsch gesetzt. Das würde auch zu den Daten über die EIA232 passen. |
|
_________________ Gruß Berecke |
|
|
|
Verfasst am: 14.06.2010, 21:08 |
|
|
|
Das Problem hat sich von selbst gelöst - habe einen neuen AtMega8 eingesetzt und plötzlich ging es.
Einstellungen des neuen Chips:
lfuse 0xe1
hfuse 0xd9
lock 0x3f
Danke nochmal für die Hilfe.  |
|
|
|
|
| myAVR.de Foren-Übersicht » myAVR Board MK1 LPT |
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1
|
|
|
|
|
|