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
Druckbare Version
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 ?Zitat:
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. :roll: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....Zitat:
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 :D
Dann bin ich mal gespannt ob ich selber rausbekomme welche Register ich wie setzten muss damit das passiert was ich will :D
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