Hallo,
ich versuche mit einem ATmega 168 auf einer Arduino Plattform über SPI
mit einem ADC zu kommunizieren. Leider bekomme ich dabei komische Werte
aus. Ich lese ein Register aus, in welchem eigentlich der Wert 0 stehen
sollte. Ich bekomme auch am Anfang den Wert 0 zurück doch nach kurzer
Zeit kommt auf einmal der Wert 255 zurück und dann mal 128 und dann
wieder 0. Also die Werte schwanken wenn man so möchte. An der
Verdrahtung kann es nicht liegen, da das ganze auf eine EVAL-Platine
ist. Also denk ich eher an den Code. Anbei der Code.
Habe mir nun einmal die Binärwerte angeschaut direkt von dem Transfer
ohne Bit-Shift. Mir ist aufgefallen, dass ich nicht jedes mal Acht
Zahlen erhalte sondern mal sind es nur sechs oder auch mal nur eine
null.
Man könnte glauben es kommen nicht alle Zeichen an...
Kann so was sein?
Wenn ich das richtig verstehe, dann liest du den Arduino aus, mit dem
PC?
Dann stelle doch einfach mal deine COM Schnittstelle für den Arduino
auch auf 9600 Baud.
Ist bestimmt dort das Problem zu suchen.
F. Fo schrieb:> Wenn ich das richtig verstehe, dann liest du den Arduino aus, mit dem> PC?> Dann stelle doch einfach mal deine COM Schnittstelle für den Arduino> auch auf 9600 Baud.> Ist bestimmt dort das Problem zu suchen.
glaub ich nicht.
Wenn ein
Ich habe ja kein Zeichensalat. Das analog value ist gut lesbar und auch
die Einsen und Nullen. Nur bekomme ich nicht immer Acht Bit zurück
sondern auch mal nur eine Null oder 3 Bit statt die Acht.
Mit Einsen und Nullen meine ich, dass ich mir den adcValue als binärzahl
anzeigen und da kommt manchmal nur eine Null oder nur drei Zahlen oder
mall acht Einser dann und so.
Piere schrieb:> Mit Einsen und Nullen meine ich, dass ich mir den adcValue als binärzahl> anzeigen und da kommt manchmal nur eine Null oder nur drei Zahlen oder> mall acht Einser dann und so.
Aber dann muss doch was verloren gehen.
Piere schrieb:> Mit Einsen und Nullen meine ich, dass ich mir den adcValue als> binärzahl> anzeigen und da kommt manchmal nur eine Null oder nur drei Zahlen oder> mall acht Einser dann und so.
Wo liest du denn die ausgegeben Werte ab? Im Serial Monitor der Arduino
IDE oder in einem Terminalprogramm?
Ja Piere - Peter :P
Im Serial Monitor der IDE lese ich ab.
Habe so eben gelesen das es wohl bei den ATmegas Problem gibt, wenn man
Pin10 als Slaveselect verwendet. Stimmt das?
Ohne jetzt das ganze Datenblatt gelesen zu haben und den Chip richtig zu
kennen, habe ich mal in den Teil mit dem seriellen Interface überflogen.
Fehlen da nicht ein paar Kommandos?
CS zum Beispiel. Das will auf Low gesetzt werden, wenn nichts anderes
auf dem Bus ist.
Usw...
Peter schrieb:> Habe so eben gelesen das es wohl bei den ATmegas Problem gibt, wenn man> Pin10 als Slaveselect verwendet. Stimmt das?
Mir nicht bekannt.
Bist du sicher dass deine Werte für Delay, Bitorder,... richtig sind?
>Habe so eben gelesen das es wohl bei den ATmegas Problem gibt, wenn man>Pin10 als Slaveselect verwendet. Stimmt das?
Könntest Du uns mal an Deinem Wissen teilhaben lassen und sagen wo Du
das gelesen hast?
F. Fo schrieb:> Moment! Noch mal den Rückwärtsgang. Du hast einen Arduino oder irgendwas> in der Richtung?> Liest du den über USB Com aus?
Ja. Über USB-Com.
Sean L. schrieb:> Peter schrieb:>>> Habe so eben gelesen das es wohl bei den ATmegas Problem gibt, wenn man>> Pin10 als Slaveselect verwendet. Stimmt das?> Mir nicht bekannt.>> Bist du sicher dass deine Werte für Delay, Bitorder,... richtig sind?
Habe jetzt auch einen anderen Pin probiert ohne Erfolg.
Delay Werte habe ich auch schon verschiedene Probiert ohne Erfolg.
F. Fo schrieb:> Fehlen da nicht ein paar Kommandos?> CS zum Beispiel. Das will auf Low gesetzt werden, wenn nichts anderes> auf dem Bus ist.
CS ist bei mir SS und wir ja auf LOW gesetzt bevor der Transfer beginnt.
Piere schrieb:> Mit Einsen und Nullen meine ich, dass ich mir den adcValue als> binärzahl> anzeigen und da kommt manchmal nur eine Null oder nur drei Zahlen oder> mall acht Einser dann und so.
In dem Sourcecode steht
Serial.println(adcValue);
Das ist doch keine Binär-Ausgabe, sondern ganz normal dezimal.
Kopier doch mal die Anzeige aus dem Serial-Monitor. Damit wir auch einen
Eindruck bekommen, was da wirklich fehlt.
Hallo,
soweit ich weiß unterdrückt serial.println führende Nullen. Es werden
also wohl eher selten alle 8 Stellen angezeigt, zumal der ADC vermutlich
mit maximal 3 Dezimalstellen auskommt.
Gruß,
Michael
Piere schrieb:> Habe jetzt auch einen anderen Pin probiert ohne Erfolg.> Delay Werte habe ich auch schon verschiedene Probiert ohne Erfolg.
Probier mal das Checksumregister auszulesen und vergleiche ob die
Chechsumme stimmt.
Oder lies mal die Temperatur aus, die sollte ja immer mehr oder weniger
gleich sein.
SPI.Mode3 habe ich probiert. Kein Erfolg.
Das mit den führenden Nullen könnten natürlich der Grund sein warum ich
ab und an nichts angezeigt bekomme.
Also werden wohl die Werte doch richtig ausgelesen. Trotzdem Frage ich
mich, warum ich z.b. am Eval-Board stark schwankende Werte habe sobald
aber der PC angeschlossen wird die Werte stabil sind?