hallo,
scheitere gleich am Anfang meiner UART Versuche - habe mir test_uart.c
mitsamt uart bibliotheken von Peter Fleury runtergeladen und auf meinen
AVR Tiny aufgespielt. Das funktioniert noch einwandfrei, d.h. ich bekomm
bei Programmstart "String stored in SRAM String stored in FLASH 134"
angezeigt und kann von meinem PC Daten zum Mikrocontroller schicken und
bekomm das Ganze wieder zurückgeschickt. Soweit scheint also alles
(Verkabelung, Takt, ...) i.O. zu sein.
Wenn ich aber ganz simpel die Zeile
uart_puts("String stored in SRAM\n");
verdoppele und zwei Zeilen ausgeben will
uart_puts("String stored in SRAM\n");
uart_puts("String2 stored in SRAM\n");
funktioniert überhaupt nichts mehr.
wie geht so was ?
gruß
Marc
Hallo,
ich kann dir bei deinem Problem leider nicht helfen, da ich selber erst
am Anfang stehen, und gerade meine ersten Versuche mit einem ATMega8 und
UART mache.
Könntest du vielleicht einen Link posten, wo du deinen Code herhast,
oder gleich den ganzen Code? Das wäre sehr nett, weil dann könnte ich
den Code mal durchlesen, und versuchen dann einen eigenen zu schreiben.
Vielen Dank schon einmal im Voraus.
Gruß, Steffen
@Stefan
ich verwende einen Attiny 2313 der mit 8 Mhz läuft - die Baudrate hab
ich auf 9600 baud laufen.
@Steffen
die sehr gute Seite von Peter Fleury findest du hier
http://www.jump.to/fleury
speziell die uart dateien wie ich sie hergenommen habe gibts hier zum
download
http://homepage.hispeed.ch/peterfleury/uartlibrary.zip
wär nett wenn du das mal bei dir nachprobieren könntest.
grüße
Marc
In dem Makefile ist der Falsche µC eingetragen! (Wenn du das benutzt,
trag mal "MCU = attiny2313" und "F_CPU=8000000" korrekt ein.
Der Attiny2313 hat nur 128 Bytes SRAM, davon sind 24+69 Bytes
(sections .data und .bss) belegt.
Da kannst du nicht so viel machen:
- Alle konstanten Strings in den Flash (uart_puts_P hast du ja schon
entdeckt)
- Überlegen, ob du die Puffer verkleinern kannst (UART_RX_BUFFER_SIZE
und UART_TX_BUFFER_SIZE in "uart.h").
- bei dem Winavr-071221 (ich wahr bisher zu faul zum updaten) muss man
extra abschalten, dass main() als normale Funktion behandelt wird:
1
intmain(void)__attribute__((OS_main));
2
intmain(void)
3
{
4
//...
Der Prototyp für main verhindert eine größere (unnötige) Push-Orgie
bei Programm-start (Wenn der GCC meldet "directive ignored" o.ä. kannst
du's ja wieder löschen)
hth. Jörg
Hallo,
wenn ich aus dem .zip- File den Programmcode von test_uart in ein neues
GCC- Project bei AVR Studio kopiere, und dann auf Build Active
Configuration klicke, dann kommt folgende Buildmeldung:
rm -rf UARTTEST.o UARTTEST.elf dep/* UARTTEST.hex UARTTEST.eep
UARTTEST.lss UARTTEST.map
Build succeeded with 0 Warnings...
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -std=gnu99
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP
-MT UARTTEST.o -MF dep/UARTTEST.o.d -c ../UARTTEST.c
In file included from ../UARTTEST.c:17:
d:/programme/avr_studio/bin/../avr/include/avr/signal.h:36:2: warning:
#warning "This header file is obsolete. Use <avr/interrupt.h>."
avr-gcc.exe -mmcu=atmega8 -Wl,-Map=UARTTEST.map UARTTEST.o -o
UARTTEST.elf
UARTTEST.o: In function `main':
C:\Dokumente und Einstellungen\Steffen
Oesterwind\Desktop\EigeneProgramme\UARTTEST\default/../UARTTEST.c:46:
undefined reference to `uart_init'
C:\Dokumente und Einstellungen\Steffen
Oesterwind\Desktop\EigeneProgramme\UARTTEST\default/../UARTTEST.c:60:
undefined reference to `uart_puts'
C:\Dokumente und Einstellungen\Steffen
Oesterwind\Desktop\EigeneProgramme\UARTTEST\default/../UARTTEST.c:65:
undefined reference to `uart_puts_p'
C:\Dokumente und Einstellungen\Steffen
Oesterwind\Desktop\EigeneProgramme\UARTTEST\default/../UARTTEST.c:73:
undefined reference to `uart_puts'
C:\Dokumente und Einstellungen\Steffen
Oesterwind\Desktop\EigeneProgramme\UARTTEST\default/../UARTTEST.c:79:
undefined reference to `uart_putc'
C:\Dokumente und Einstellungen\Steffen
Oesterwind\Desktop\EigeneProgramme\UARTTEST\default/../UARTTEST.c:90:
undefined reference to `uart_getc'
C:\Dokumente und Einstellungen\Steffen
Oesterwind\Desktop\EigeneProgramme\UARTTEST\default/../UARTTEST.c:106:
undefined reference to `uart_puts_p'
C:\Dokumente und Einstellungen\Steffen
Oesterwind\Desktop\EigeneProgramme\UARTTEST\default/../UARTTEST.c:115:
undefined reference to `uart_puts_p'
C:\Dokumente und Einstellungen\Steffen
Oesterwind\Desktop\EigeneProgramme\UARTTEST\default/../UARTTEST.c:123:
undefined reference to `uart_puts_p'
C:\Dokumente und Einstellungen\Steffen
Oesterwind\Desktop\EigeneProgramme\UARTTEST\default/../UARTTEST.c:128:
undefined reference to `uart_putc'
make: *** [UARTTEST.elf] Error 1
Build failed with 10 errors and 1 warnings...
Woran liegt das? Wo, bzw. wie muss ich die Uartlib einfügen, damit alles
korrekt funktioniert?
Tschuldigung, dass ich hier jetzt so in den Thread hineinplatze ;-).
Vielen Dank schon einmal im Voraus.
Gruß, Steffen
@ (derelektroniker):
Du musst die Datei "uart.c" unter "Source-files" einzufügen (oder
externes Makefile benutzen - sollte aber nicht nötig sein)
rtfm, Jörg
Ok, vielen Dank für den Tip!!!
Muss ich das jetzt immer machen, wenn ich eine lib von Peter Fleury
verwende?
Also muss ich uart.c in Source File einfügen, und dann noch uart.h
includen?
Ich werde nun mal die UART- Verbindung testen. Ich hab leider nur einen
4 Mhz Quarz gerade da, funktioniert das mit dem auch (ist ja kein
Baudratenquarz)?
Gruß, Steffen
Ach ja, was ich noch vergessen hatte: Wie muss ich den ATMega8 fusen,
damit er einen externen Quarzoszillator mit 4Mhz verwendet?
Vielen Dank schon einmal im Voraus.
Gruß, Steffen
Hallo,
also bei mir klappt es mit einem Mega8 ohne Probleme. Ich hab auch schon
die Zeile:
uart_puts("String stored in SRAM\n");
verdoppelt, und es klappts immernoch problemlos.
Gruß, Steffen