Es gibt da noch eine Möglichkeit, und zwar sollte man zuerst minicom starten,
und erst dann den µC einschalten.
Wenn man das genau anders herum macht, kommt natürlich nur Müll raus.
Gruß Sebastian
Es gibt da noch eine Möglichkeit, und zwar sollte man zuerst minicom starten,
und erst dann den µC einschalten.
Wenn man das genau anders herum macht, kommt natürlich nur Müll raus.
Gruß Sebastian
Auch keine Änderung.
So wie ich den Code vestehe sollte Minicom doch mit Zeichen überflutet werden oder? Es kommt aber rein garnichts von selbst an, nur komische Echos.
Beim kompilieren stand sowas wie: "Mit der Uhr stimmt was nicht" usw. Kann es daran liegen?
Und das auf deutsch ?Mit der Uhr stimmt was nicht
mache mal make clear und make > log.txt
und sende mal die log.txt
Das verstehe ich auch nicht
oder machmal cat /dev/ttyS0 und dann den µC einschalten,
mal sehen was dann in die Konsole reinkommt,
es kann doch nicht so schwer sein
Gruß Sebastian
C ist eher was für professionelle Programmierer. Wenn alles mit Bascom funktioniert was Du machen willst und Du nicht den Anspruch hast, Deine Kenntnisse zu erweitern, kannst Du einfach bei Bascom bleiben.Code:Ja das merkt man: Krank wie viel Code man brauch um was über UART auszugeben. In Bascom hat print() gereicht![]()
Gruss,
stochri
also hier ist log.txt:
In der Konsole steht aber trotz ">log.txt"das hier:Code:set -e; avr-gcc -MM -mmcu=atmega32 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=uart.lst uart.c \ | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > uart.d; \ [ -s uart.d ] || rm -f uart.d set -e; avr-gcc -MM -mmcu=atmega32 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=uart.lst uart.c \ | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > uart.d; \ [ -s uart.d ] || rm -f uart.d -------- begin -------- avr-gcc --version avr-gcc (GCC) 4.0.2 Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. avr-gcc -c -mmcu=atmega32 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=uart.lst uart.c -o uart.o avr-gcc -mmcu=atmega32 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=uart.o uart.o --output uart.elf -Wl,-Map=uart.map,--cref -lm avr-objcopy -O ihex -R .eeprom uart.elf uart.hex avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \ --change-section-lma .eeprom=0 -O ihex uart.elf uart.eep avr-objdump -h -S uart.elf > uart.lss Size after: uart.elf : section size addr .text 196 0 .data 0 8388704 .bss 0 8388704 .noinit 0 8388704 .eeprom 0 8454144 .stab 1356 0 .stabstr 1283 0 Total 2835 Errors: none -------- end --------
Wenn ich minicom starte sendet er irgendwelche signale vom PC rüber. Die werden dann in der Konsole angezeigt. Man kann sie im minicom -s einstellen. Könnten die irgendwas damit zu tun haben?Code:mathias@linux:~/uart> make > log.txt make: Warning: File `uart.c' has modification time 2,3e+04 s in the future make: Warning: File `uart.c' has modification time 2,3e+04 s in the future uart.c:42:3: warning: no newline at end of file make: Warnung: Mit der Uhr stimmt etwas nicht. Die Bearbeitung könnte unvollständig sein.
Ich denke ein "touch uart.c" sollte das Problem mit der Uhr beheben.
Da kannst Du am Programmende Enter drücken und speichern, wann ist es auch weg....uart.c:42:3: warning: no newline at end of file
Vergess ich immer wieder
Es sind aber keine Fehler, das Programm müßte dann i.O sein...
und was passiert mit "cat /dev/ttyS0" und dann µC starten?
Was kommt in die Konsole rein ?
Gruß Sebastian
EDIT: Hast Du Deine Uhr falsch eingestellt? meine stimmt jedenfalls.....
Auf jedem Fall komm ich aus der Zukunft![]()
STOOOOP!
Ich hab mir mal ein neues Kabel gebaut, dachte das alte wäre vielleicht kaput obwohl es von Außen gut aussah. Und tatsächlich: jetzt gehts es kommt immer "xy" + Zeilenumbruch ist doch richtig so oder?
![]()
![]()
![]()
![]()
Ja genau, so ist es richtig....
Also doch Userfehler ...
Jetzt kannst Du Dich ruhig der Programmiersprache C widmen, und Dich nicht mehr mit so nem Sch.... rumärgern.
Gruß Sebastian
Ja, ich hab mir schon etwas sorgen gemacht: So viel Zeit nur um "HelloWorld" hinzubekommen
Dann bin ich mal gespannt ob ich selber rausbekomme welche Register ich wie setzten muss damit das passiert was ich will
Danke für die Geduld und die Code-Beispiele!
mfg
jagdfalke
Noch mal was zu printf: Man kann sie doch benutzen. Man muss dem Compiler nur mit fdevopen() sagen, wie er die Ausgabe machen soll. die Routine zur Ausgabe eines einzelnen Zeichens muss man also selber schreiben, das zusammenstellen der Strings erledigt printf(). Folgender Code ist getestet und funktioniert:
Gruß,Code:#include <io.h> #include <stdio.h> #define F_CPU 8000000 // 8 MHz Taktfrequenz #define UART_BAUD_RATE 2400 #define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1) int uart_putchar(char c) { if (c == '\n') uart_putchar('\r'); loop_until_bit_is_set(UCSR0A, UDRE); UDR0 = c; return 0; } void UartInit(void) { UCSRB = 0x08 UBRRL = UART_BAUD_SELECT; } int main (void) { UartInit(); //Schnittstelle initialisieren fdevopen(uart_putchar, NULL, 0); printf ("HelloWorld"); }
askazo
Lesezeichen