Forum: Mikrocontroller und Digitale Elektronik fleury uart - startschwierigkeiten


von DeMarc (Gast)


Lesenswert?

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

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

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

von Stefan (Gast)


Lesenswert?

>wie geht so was ?

Könnte da dran liegen dass der Tiny (welcher?) zu wenig RAM hat, und die 
2. Zeile selbiges schon überfüllt....

von DeMarc (Gast)


Lesenswert?

@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

von Jörg X. (Gast)


Lesenswert?

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
int main(void) __attribute__((OS_main));
2
int main(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

von deMarc (Gast)


Lesenswert?

vielen Dank für die Anregungen

gruß
Marc

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

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

von Jörg X. (Gast)


Lesenswert?

@ (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

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

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

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

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

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

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

von deMarc (Gast)


Lesenswert?

ich habs mittlerweile auch hinbekommen

Marc

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.