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
>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....
@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 | 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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.