Folgender Code soll von den ersten 3 ADC des Mega8 den 8-Bit wert lesen
und diesen dann per Uart an meinem PC sendet. Dort kommen aber nur 3
Fragezeichen an. Entweder habe ich einen Fehler im Code oder einen
Fehler im Zeichensatz des Testprogramms.
Ich denke es ist mal wieder ein dummer Fehler, der mir nicht auffallen
will...
Ich hoffe man kann mir helfen und bedanke mich mal für Hilfe im voraus
;)
MfG J. Hebeler
J. Hebeler schrieb:> SendData('X');>> SendData('Y');>> SendData('Z');>> SendData(X);>> SendData(Y);>> SendData(Z);
Die ersten 3 Zeichen sind Ascii-Zeichen, die dein PC auch versteht.
Die letzten sind irgendwelche Zahlenwerte(Hex), die er versucht als
Ascii zu interpretieren, aber meistens nicht versteht.
Da musst du jeweils zwei Ascii-Zeichen draus machen.
mfg.
Hi
> return ADCW;
Bei ADLAR=1 ist nur ADCH relevant.
>void SendData(char data)>{> while(!(UCSRA & (1 << UDRE)));> UDR = data;>}
Und du meinst, das das dir einen Wert in ASCII ausgibt?
MfG Spess
>>Ascii zu interpretieren, aber meistens nicht versteht.
Ist mir klar, sollte aber zumindest bei Wertänderung des ASCII Zeichens
am Computer bewirken, der zeigt mir aber nur Fragezeichen an. Wenn das
das Problem wäre, würde ich anstelle der ASCII-Zeichen schnell die
Hexwerte ausgeben lassen.
>>Und du meinst, das das dir einen Wert in ASCII ausgibt?
Es werden Daten binär übertragen, es ist mir egal ob es ASCII Zeichen
sind.
Ich will mir nur nicht stundenlang mit Debugging verbringen, um dann
einen einfachen Fehler in der Firmware zu Korrigieren.
MfG J. Hebeler.
Zum Wandeln der Int Werte in ASCII Code kannst du die Funktion
itoa(int,char*,Basis); aus der stdlib.h hernehmen.
PS: Deklariere deine result Variable mal als INT oder uint8_t.
Hi
>Zum Wandeln der Int Werte in ASCII Code kannst du die Funktion>itoa(int,char*,Basis); aus der stdlib.h hernehmen.
Dazu müsste er von 'char ADCConvert8Bit(char channel)' erst mal
vernünftige Werte bekommen:
>return ADCW;
Er hat mit ADLAR=1 auf linksbündig gestellt. Der Compiler übergibt aber
(nach meiner Simulation) an 'SendData(X)' ADCL und nicht ADCH.
MfG Spess
>>Dazu müsste er von 'char ADCConvert8Bit(char channel)' erst mal
vernünftige Werte bekommen:
Jop, hab ich auch getestet, ich hatte es zuerst mit ADCH, dann hab ich
in eurem Tut ADCW gelesen, das Probiert, hat halt auch net funktioniert,
jetzt wieder auf ADCH umgestellt.
Hab jetzt mein Testprogramm aufm PC umgeschrieben, das es mir nur noch
die Zahlenwerte der chars ausgibt. Sehe das XYZ und 3 mal 255 ankommt.
Kann es sein, das die Interne Refernez falsch gewählt ist, bzw falsch
angesteuert?
Ich habe Signalpegel von 1,6 - 2,3V gemessen und habe an AREF ein C=100n
gegen GND geschaltet.
MfG J.Hebeler
Hi
ADMUX = (1 << REFS1) | (1 << REFS0) | (1 << ADLAR);
stellt die 2,56V Referenz ein.
>Sehe das XYZ und 3 mal 255 ankommt. Kann es sein, das die Interne Refernez>falsch gewählt ist, bzw falsch angesteuert?
Das ist allerdings ein Indiz, das die Eingansspannung >= Vref ist.
Nimm doch einfach mal VCC als Referenz.
MfG Spess
>>Noch was: Auch wenn du nur 8 Bit haben willst, sind 16MHz für den
ADC-Takt wesentlich zu schnell. Stell mal den Prescaler ein.
Hab ich jetzt mal gemacht
>>Das ist allerdings ein Indiz, das die Eingansspannung >= Vref ist.
Nimm doch einfach mal VCC als Referenz.
Jop, hab ich jetzt auch gemacht, es kommen jetzt andere werte an, Ich
muss die aber erst gescheit aufbereiten, ansonsten kann ich nicht
verifizieren, das es die richtigen sind.
Danke für die Hilfe.