Forum: PC-Programmierung itoa programmierung


von Hüsameddin N. (hsameddin_n)


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

: Verschoben durch User
von Der Magier (Gast)


Lesenswert?

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.... :-)

von U.R. Schmitt (Gast)


Lesenswert?

Jepp Dein Problem ist in Zeile 42

von rogie (Gast)


Lesenswert?

In der Datei Problem.c

von Der Magier (Gast)


Lesenswert?

Ja, jetzt seh ich´s auch, flalscher Befehl in Zeile 42!

von Michael S. (Firma: electro-tester) (michael0307)


Lesenswert?

Ja .. ja  definitiv Zeile 42.

von Hüsameddin N. (hsameddin_n)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

Immer noch nicht verstanden?


Z E I G E    D E I N E N    C O D E

von Hans-Georg L. (h-g-l)


Lesenswert?

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 ;)

von Hüsameddin N. (hsameddin_n)


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
}  }

von Karl H. (kbuchegg)


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.

von Hüsameddin N. (hsameddin_n)


Lesenswert?

es ist die selbe platine gewesen, ich habe auch die selben einstellungen 
gehabt beim terminal, heißt das, dass ich die baudrate ändern muss?

von Juergen R. (stumpjumper)


Lesenswert?

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
Noch kein Account? Hier anmelden.