Forum: Mikrocontroller und Digitale Elektronik max186 (ADC) über SPI ansprechen


von Matze K. (phytomed)


Angehängte Dateien:

Lesenswert?

Moin,

ich möchte einen 12 Bit-AD-Wandler über die SPI-Schnittstelle
des Atmega16 oder des Atmega32 ansprechen. Bei meinem Programm
ergibt die Ausgabe allerdings immer 0, auch wenn ich Spannung
anlege. Ein Problem ist sicherlich, dass die Kommunikation (SPDR)
nur 8 Bit lang ist aber "das Ergebnis" eigentlich 12 Bit lang.
Leider weiss ich nicht wie ich das ändern kann, allerdings würde
mir notfalls auch 8 Bit Auflösung reichen.

Leider weiss ich auch nicht genau was mit "gleichzeitig" beim
Datenaustausch zwischen Master und Slave gemeint ist,
ist das ablesen des SPDR nach meiner Anfrage überhaupt richtig
oder muss man "gleichzeitig" ablesen?!

Da ich nicht weiss wie man eine zweite Datei anhängt werde ich das
Anschlussbild in einer "Antwort" schreiben.

Vielen Dank
Matthias

von Matze K. (phytomed)


Angehängte Dateien:

Lesenswert?

Hier kommt nun der Anschlussplan

Danke
Matthias

von Matze K. (phytomed)


Lesenswert?

Entschuldigt bitte nocheinmal,

ich habe die Angabe der Pins vergessen,
also

#define DD_MOSI         PB5
#define DD_MISO         PB6
#define DD_SCK          PB7

und ausserdem

PB4 als SS

Also genau wie im Atmega 16 Datenblatt

Danke
Matthias

von dds5 (Gast)


Lesenswert?

Das Datenblatt des MAX186 sollte in der Lage sein, zu dem Thema
"Auslesen der Daten" etwas beizutragen.
Bei den mir bekannten Bausteinen (z.B. TLC2543) muss man einfach 2 mal
8 Bit direkt nacheinander auslesen um alle 12 Bit (wahlweise links-
oder rechtsbündig) zu erhalten.

Dieter

von Matze K. (phytomed)


Angehängte Dateien:

Lesenswert?

Moin Dieter,

ich habe nun die library so verändert,
dass ich zweimal hintereinander SPDR abrufe und
dann die Daten in einer Variable zusammenführe,
allerdings funktioniert es immer nocht nicht!?!?

Ich hänge die veränderte Datei nocheinmal an.

Danke
Matthias

von dds5 (Gast)


Lesenswert?

Hallo Matthias,

ich stamme nun nicht aus dem Atmel AVR Lager und hab von C nur
rudimentäre Ahnung, aber das
    DDRB = (1 << DD_MOSI) | (1 << DD_SCK);
    DDRB = (1 << PB4); //SS als Augang setzen
ist meiner Meinung nach leicht daneben.
Mit der zweiten Zeile werden nämlich MOSI und SCK wieder von Ausgang
auf Eingang umgeschaltet.
Es müsste nach meinem Verständnis heißen
    DDRB = (1 << DD_MOSI) | (1 << DD_SCK) | (1 << PB4);
dann sind alle 3 Pins als Ausgang geschaltet.

Vielleicht war das schon alles

Gruß
Dieter

von Thino (Gast)


Lesenswert?

Hi ich habe mal noch eine frage zum MAX186.
ich möchte meine heizungssteuerung mit dem programm profilab30 
realisieren. dazu brauche ich 14 analoge eingäne. nun meine frage, kann 
man den schaltkreis über den seriellen oder parallelen port direkt 
ansteuern?
wenn nicht wie ist es am einfachsten zu realisieren?
für brauchbare tips wäre ich euch dankbar
Thino

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.