hallo, Ich habe ein programm geschrieben unter windows 7, beim terminate werden auch die richtigen ad wandlerwerte angezeigt, jedoch wenn ich das selbe programm auf einem windows xp rechner laufen lasse bekomme ich nur irgendwelche askii zeichen... kann mir da bitte jemand helfen... danke
:
Verschoben durch User
Moment noch, ich hole gerade die Glaskugel, um deine Programmiersprache herauszufinden, danach schau ich mir deinen Quellcode an. Das ganze dauert halt ein bißchen.... :-)
aso sry für die fehlenden informationen, das programm habe ich für einen avr atmega8 geschrieben, da es unter windows 7 geht nehm ich an das es nicht programmspezifisches ist
Hüsameddin N. schrieb: > aso sry für die fehlenden informationen, > > das programm habe ich für einen avr atmega8 geschrieben, da es unter > windows 7 geht nehm ich an das es nicht programmspezifisches ist Ah ja, wenn das so ist! Dann wirds wohl in der Zeile 42 + 42, also 84, sein!
Hüsameddin N. schrieb: > aso sry für die fehlenden informationen, > > das programm habe ich für einen avr atmega8 geschrieben, da es unter > windows 7 geht nehm ich an das es nicht programmspezifisches ist Ich dachte Windows soll erst mir der nächsten Version auf nicht Intel Hardware laufen. Aber Windows 7 auf einem armega8 find ich echt cool ;)
Hier nunmal der programmcode
1 | #include <avr/io.h> |
2 | #include <inttypes.h> |
3 | #define FOSC 12000000UL //12MHz Taktfrequenz
|
4 | #define BAUD 9600UL //9600 Baud
|
5 | #define MYUBRR (FOSC/(16*BAUD))-1
|
6 | /* ADC initialisieren */
|
7 | void ADC_Init(void) { |
8 | uint16_t result; |
9 | ADMUX = (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen |
10 | ADCSRA = (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler |
11 | ADCSRA |= (1<<ADEN); // ADC aktivieren |
12 | /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
|
13 | also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
|
14 | ADCSRA |= (1<<ADSC); // eine ADC-Wandlung |
15 | while (ADCSRA & (1<<ADSC) ); // auf Abschluss der Konvertierung warten |
16 | /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
|
17 | Wandlung nicht übernommen. */
|
18 | result = ADCW; |
19 | }
|
20 | /* ADC Einzelmessung */
|
21 | uint16_t ADC_Read( uint8_t channel ) |
22 | {
|
23 | // Kanal waehlen, ohne andere Bits zu beeinflußen
|
24 | ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); |
25 | ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" |
26 | while (ADCSRA & (1<<ADSC) ) // auf Abschluss der Konvertierung warten |
27 | ;
|
28 | return ADCW; // ADC auslesen und zurückgeben |
29 | }
|
30 | void USART_Transmit( unsigned char data ) |
31 | {
|
32 | while (!(UCSRA &(1<<UDRE))) |
33 | ;
|
34 | UDR = data; |
35 | }
|
36 | void USART_Transmit_String( char* s ) |
37 | {
|
38 | while( *s != '\0' ) |
39 | {
|
40 | USART_Transmit( *s ); |
41 | ++s; |
42 | }
|
43 | }
|
44 | int main (void) |
45 | {
|
46 | UBRRH=(unsigned char)(MYUBRR>>8); //4 höheren Bits des UBRR |
47 | UBRRL=(unsigned char) MYUBRR; //4 niedere Bits des UBRR |
48 | UCSRB=(1<<RXEN)|(1<<TXEN); //Empfangen und Senden ermöglichen |
49 | UCSRC|=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //UCSRC Register wählen und via Z1 und Z0 8bit als Ergebnisslänge zum Einlesen festlegen |
50 | ADC_Init(); |
51 | char Werte[10]; |
52 | while(1) |
53 | {
|
54 | int i = ADC_Read(0); |
55 | itoa( i, Werte, 10 ); |
56 | USART_Transmit_String( Werte ); |
57 | USART_Transmit( ' ' ); |
58 | } } |
1) Dein Programm läuft weder auf Windows 7 noch auf Windows XP Dein Programm läuft auf dem ATMega 8 und auf deinem PC läuft ein Terminalprogramm, welches dem µC zuhört, was der so auf der seriellen Schnittstelle dahersendet. 2) da daher das Programm auf dem Mega8 gar nicht von der Windows- Version abhängen kann, kann auch nicht itoa der Übeltäter sein. Denn: Der µC schickt immer das gleiche auf der seriellen Schnittstelle raus, egal wer ihm zuhört. 3) Wenn dein Terminalprogramm auf Windows 7 den µC versteht, das Terminalprogramm auf Windows XP aber nicht, dann muss der Fehler in der Konfiguration des Terminalprogramms zu suchen sein. Das wahrscheinlichste ist, dass dein Terminalprogramm auf Windows 7 korrekterweise auf 9600 Baud steht, das Terminal- programm, welches auf XP läuft aber nicht. Immer unter der Voraussetzung natürlich, dass du zwischendurch die Mega8 Hardware nicht getauscht hast, d.h. du schliesst ein und dieselbe Platine mit dem gleichen Mega8 einmal an Windows 7 und einmal an Windows XP an.
es ist die selbe platine gewesen, ich habe auch die selben einstellungen gehabt beim terminal, heißt das, dass ich die baudrate ändern muss?
Erst mal solltest Du prüfen ob die Baudrate, Stopbits u. Parität auf beiden Systemen gleich eingestellt sind. Nur mal so am Rande - um welches Terminalprogramm handelt es sich denn?
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.