hmm, dann schick mir doch mal den code der bei dir funktioniert. vielleicht hab ich da auch einfach was falsh gemacht.
hmmm ... ehrlich gesagt keine Ahnung ...
du verwendest ja Linux wie ich sehe ...
vielleicht gibt es da auch so ein Tool Makefile, welches dir ein Makefile generiert...
unter Windows schaut der Aufruf folgend aus:
"C:\Programme\WinAVR\bin\wish84.exe mfile.tcl"
hmm, dann schick mir doch mal den code der bei dir funktioniert. vielleicht hab ich da auch einfach was falsh gemacht.
Code:#include <stdio.h> #include <avr/io.h> int PutChar(char c); int main(void) { float test=5.3; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off // USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x17; fdevopen(PutChar,NULL,0); while(1) { printf("%f\n\r",test); } return 0; } int PutChar(char c) { while ( !( UCSRA & (1<<UDRE)) ); UDR=c; return 0; }
also bei deinem Code kommt bei mir erstmal die Meldung:
mfgtest.c: In function 'main':
test.c:29: warning: format '%f' expects type 'double', but argument 2 has type 'float'
jagdfalke
Ist eh nur eine warning ...
ist vielleicht besser wenn du es so schreibst:
printf("%f\n\r",(double)test);
bei mir hat es auch ohne den cast nach double funktioniert, ist mit ist es bestimmt sauberer....
nagut, jetzt gehts das schon mal. der output is aber das hier:
..�F.y F.<�.<.f.<�.<�.y F.<�.<.f.<�.<�.y F.<�.<.f.y F.<�.y f.<�.<.f.y
das sieht nach einem Baudratenfehler aus.
hast du mein Programm verwendet?
wenn ja, musst du das Programm noch an deinen Quarz anpassen!
die Initialisierung der seriellen Schnittstelle kannst du eh von deinem alten Programm übernehmen ...
Hmm, jetzt kommt wieder das schöne "?":
Ausschnitt aus der Konsole:
Meint ihr es kann an minicom liegen??
?
?
?
?
Hier der komplette Code (ich poste den immer mal wieder damit man sich nicht immer durch die Posts wühlen muss um den aktuellen zu finden)
Code:#define F_CPU 8000000 #define BAUD_RATE 9600 #include <stdio.h> #include <avr/io.h> int PutChar(char c); void uart_init(int tx, int rx); int main(void) { float test=5.3; uart_init(1, 0); fdevopen(PutChar,NULL,0); while(1) { printf("%f\n\r", (double)test); } return 0; } int PutChar(char c) { while ( !( UCSRA & (1<<UDRE)) ); UDR=c; return 0; } void uart_init(int tx, int rx) { UBRRL = (F_CPU/(BAUD_RATE*16l)-1); if(tx == 1) { UCSRB |= (1<<TXEN); } if(rx == 1) { UCSRB |= (1<<RXEN); } }
versuch es nocheinmal so:
natürlich musst du wieder die Baudrate bzw. Quarzfrequenz anpassen ...Code:#include <stdio.h> #include <avr/io.h> #include <stdlib.h> int PutChar(char c); int main(void) { float test=5.3; char str[20]; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off // USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x17; fdevopen(PutChar,NULL,0); while(1) { dtostrf(test,0,2,str); printf("%s\n\r",str); } return 0; } int PutChar(char c) { while ( !( UCSRA & (1<<UDRE)) ); UDR=c; return 0; }
Wo kommt denn dieses dtostrf her? In meinen manpages steht auch nix darübertest.o: In function `main':
/home/mathias/makefile und load/roboterarm steuerung/test.c:21: undefined refere nce to `dtostrf'
mfg
jagdfalke
Lesezeichen