Forum: Mikrocontroller und Digitale Elektronik Problem mit ADC MCP3204 und Atmega 8515


von Stefan S. (stefan_s92)


Angehängte Dateien:

Lesenswert?

Hallo miteinander!

Ich habe folgendes Problem:
Ich habe einen A/D Wandler MCP3204 an einem ATmega 8515 über SPI 
angeschlossen. d.h.

->MISO an Dout
->MOSI an Din
->SCK  an CLK
->SS   an CS/SHDN

Es soll eine Spannung vom ADC gemessen werden im Bereich 0-5 Volt. 
Spannungsreferenz und Versorgungsspannung sind 5 Volt.

Das ganze wird auf einem LCD ausgeben. AMC2404A heißt dieses und ist ein 
4 Zeilen Display mit 24 Zeichen pro Zeile. Sonstige Textausgabe. 
Hintergrundbeleuchtung Initalisierung klappt auch soweit alles.

Ich habe mich an den Code von dieser Seite hier gewandt:
http://extremeelectronics.co.in/avr-tutorials/interfacing-12-bit-spi-adc-mcp3204-with-avr-micro/

Wenn ich aber nun einen Wert des AD - Wandlers anzeigen lassen will 
zeigt das LCD mir nur komische Zeichen. siehe Anhang.

Kann mir jemand weiterhelfen wo der Fehler liegt?

Vielen Dank schonmal im Voraus!

von Dex (Gast)


Lesenswert?

Hast Du schon mal einen "TestText" ausgegeben ?

von Stefan S. (stefan_s92)


Lesenswert?

Ja Textausgabe funktioniert Problemlos.
Curser setzten usw auch. alle 4 Zeilen sind beschreibbar

von Chris L. (kingkernel)


Lesenswert?

Zeig uns doch bitte DEINEN code. Am besten auch gleich den Schaltplan 
und ein Foto (Achtung: Bildformate) von deiner Verkabelung

von Stefan S. (stefan_s92)


Angehängte Dateien:

Lesenswert?

Dies ist mein Hauptprogramm. Foto habe ich leider nicht zur Hand es 
lässt sich auch nicht besonders viel darauf erkennen. Verbindungen wurde 
aber schon durchgepiepst und belegt wie oben geschrieben.

Im Anhang auch die bearbeitete spi.h

von Michael D. (etzen_michi)


Lesenswert?

Hast du die Infos des AD Wandlers nach ASCII gewandelt bevor du diese 
zum Display sendest?

Wenn die Textausgabe aufn Display funktioniert, nutze ich dieses gerne 
als Debug, indem ich die empfangenen Daten als ASCII Codierten Hex Wert 
ans Display sende.

Beispiel ich empfange 0x45, sende ich 0x34 0x35 ans Display

von Stefan S. (stefan_s92)


Lesenswert?

Also ich hab bis jetzt noch nichts gewandelt. Wie bewerkstelligt man 
denn die Wandlung?

von Michael D. (etzen_michi)


Lesenswert?

Sagen wir du bekommst von deinem AD Wandler einen Wert von 128 zurück.


Ich meine fast das es in C dafür eine Routine gibt.

Ich habe es damals in ASM so gemacht:

Obere Hälfte des BVyte verglichen ob größer 9.
 Wenn nein, dann +0x30 (Hat man die Zahl als ASCII 0-9)
 Wenn ja, dann +0x38 (Hat man die Zahl als ASCII A-F)

Dann kann man schonmal die erste Ziffer als Hex an das Display senden.
Das gleiche dann noch mit der unteren Hälfte machen.

Praktisch ist dann auch wenn man dann immer mal die Spalte auf 0 stellt, 
das der Wert auch immer an der gleichen Stelle steht.

von phischu (Gast)


Lesenswert?

wenn man eine fertige Funktion zur Umwandlung verwenden will geht auch 
die itoa () aus der stdlib.h

http://www.delorie.com/djgpp/doc/libc/libc_517.html

von Stefan S. (stefan_s92)


Lesenswert?

Das mit den ASCII Zeichen hab ich jetzt nicht so ganz verstanden. warum 
soll ich schauen ob der wert größer als 9 ist? weil 10 A ist?

von Stefan S. (stefan_s92)


Lesenswert?

Wenn ich itoa() verwende zeigt das Display jetzt garnichts mehr an!

Gibts es denn eine grundlegende Möglichkeit die SPI Kommunikation zu 
überprüfen?

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.