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!
Ja Textausgabe funktioniert Problemlos. Curser setzten usw auch. alle 4 Zeilen sind beschreibbar
Zeig uns doch bitte DEINEN code. Am besten auch gleich den Schaltplan und ein Foto (Achtung: Bildformate) von deiner Verkabelung
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
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
Also ich hab bis jetzt noch nichts gewandelt. Wie bewerkstelligt man denn die Wandlung?
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.
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.