itoa programmierung

OP #2022024
Lesenswert?
• ▲
▼
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
OP #2022281
Lesenswert?
• ▲
▼
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
}  }
#2022342
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren