INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wie programmiere ich ein externen AD-Wandler
03.04.2014, 09:09 (Dieser Beitrag wurde zuletzt bearbeitet: 03.04.2014 09:10 von Andreas_h.)
Beitrag #17
RE: Wie programmiere ich ein externen AD-Wandler
Super, ich danke Dir ich werde es mal versuchen und mich dann nochmal melden.


Ps: Sorry, ich hab mein Schaltplan in Eagle gestaltet und da hab ich mir den Baustein Arduino UNO selbst gezeichnet. Bei mir im Schaltplan für den Arduino UNO ist 8 an Pin 21, 9 an Pin 22, 10 an Pin 23, 11 an Pin 24, 12 an Pin 25 und 13 an Pin 26. Also sind die digitalen I/O von Pin 21-26 bestückt.

Ich weiss sorry, dass konntest Du nicht wiessen. Wenn ich den internen A/D-Wandler über A0 nutze, dann bekomme ich halt Wert raus. Deswegen denge ich mal, dass die Bestückung der Platine richtig ist.

Herzlichsten DANK!

Gruß
Andreas

ich meine DENKE ich mal Wink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.04.2014, 18:30
Beitrag #18
RE: Wie programmiere ich ein externen AD-Wandler
(03.04.2014 09:09)Andreas_h schrieb:  Super, ich danke Dir ich werde es mal versuchen und mich dann nochmal melden.


Ps: Sorry, ich hab mein Schaltplan in Eagle gestaltet und da hab ich mir den Baustein Arduino UNO selbst gezeichnet. Bei mir im Schaltplan für den Arduino UNO ist 8 an Pin 21, 9 an Pin 22, 10 an Pin 23, 11 an Pin 24, 12 an Pin 25 und 13 an Pin 26. Also sind die digitalen I/O von Pin 21-26 bestückt.

Ich weiss sorry, dass konntest Du nicht wiessen. Wenn ich den internen A/D-Wandler über A0 nutze, dann bekomme ich halt Wert raus. Deswegen denge ich mal, dass die Bestückung der Platine richtig ist.

Herzlichsten DANK!

Gruß
Andreas

ich meine DENKE ich mal Wink

...ähm warum zeichnest du den UNO denn selber, das Schaltbild samt Layout kannst du hier auf der arduino.cc Seite runterladen UNO-Doc , das habe ich mit dem Ardi Ethernet auch gemacht und die Positionen der Shield Buchsen gleich so ins eigene Layout übernommen - passt. Ja also so wie es aussieht mußt du mal mit der SPI Kommunikation dich befassen und die Zwei Configurations Register vom ADC richtig einstellen...dann sollten da auch Werte rauskommen.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.04.2014, 11:39
Beitrag #19
RE: Wie programmiere ich ein externen AD-Wandler
Ich wusste das leider nicht, deswegen habe ich das Schaltbild selber gezeichnet.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.04.2014, 11:48
Beitrag #20
RE: Wie programmiere ich ein externen AD-Wandler
(07.04.2014 11:39)Andreas_h schrieb:  Ich wusste das leider nicht, deswegen habe ich das Schaltbild selber gezeichnet.

...das Internet weiß (fast) alles, gerade bei Open Source Projekten wie dem Arduino...siehe auch meine Signatur...
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.04.2014, 12:41
Beitrag #21
RE: Wie programmiere ich ein externen AD-Wandler
Ok

lg
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.04.2014, 16:32
Beitrag #22
RE: Wie programmiere ich ein externen AD-Wandler
Hallo, ich hab die letzten Tag mich mit dem Datenblatt des ADC 1302 beschäftigt. Im Datenblatt auf Seite 18 habe ich für den Conversion-Start-Byte" folgendes rausbekommen: (START)10010000. Dieser kommt zustand, weil ich eine Spannung am CH1 des ADC erzeuge. Also wäre dies hier mein Befehl für die Datenübertragung: SPI.transfer(0x90); Ich bekomme den Wert 61440 raus, bei eine Spannung von 2V, wenn ich jetzt die Spannung ändere, dann bleibt aber der Wert gleich. Kannst Du mir vielleicht sagen, woran das liegt?

Ps: Da ich eine interne Referensspannung von 4,096V habe und Spannungswert/Bit 0,0625mV ist (U=Vref/65536). Bekomme ich für 61440 3,84V raus (U=61440*0,0625mV)

hier ist mein geänderter Code:

#include <SPI.h>

int cs = 8;
unsigned long adcValueLSB;
unsigned long adcValueMSB;
unsigned long adcValue;

void setup(){
pinMode(cs, OUTPUT); // Pin cs (chip select) als Ausgang definiert
digitalWrite(cs, HIGH); // cs auf 1 setzen
SPI.begin(); // Startet die SPI-Bibliothek
SPI.setDataMode(SPI_MODE0); // Setzt den SPI-Modus
SPI.setClockDivider(SPI_CLOCK_DIV2); // Stellt die Geschwindigkeit ein
SPI.setBitOrder(LSBFIRST); // Setzt die Bit-Reihenfolge Least-Significant-Bit
Serial.begin(9600);
}

void loop()
{
digitalWrite(cs, LOW);
delayMicroseconds(500);
SPI.transfer(0x90);
delayMicroseconds(500);

adcValueLSB = SPI.transfer(0x00);
adcValueMSB = SPI.transfer(0x00);
digitalWrite(cs, HIGH);
adcValue = adcValueMSB << 8;
adcValue = adcValue | adcValueLSB;

Serial.print("analog value =");
Serial.println(adcValue);
Serial.print('\n');
delay(1000);
}

lg
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.04.2014, 18:43 (Dieser Beitrag wurde zuletzt bearbeitet: 07.04.2014 18:51 von Bitklopfer.)
Beitrag #23
RE: Wie programmiere ich ein externen AD-Wandler
...: (START)10010000 ....ähm hier vermisse ich laut Datenblatt den Range Select, versuche es mal mit dem Wert B10010101 = 0x95 was bedeuteut wie START Chan 1, Singel Ended, FSR = VREF....also ==> SPI.transfer(0x95), und dann mußt dich entscheiden entweder Mode 0 oder Mode 1.
Bleiben wir mal bei Mode 0, dann mußt du noch ein Füllbyte nachschieben...siehe Code unten.
Erst dann kannst hoffentlich die ADC Werte richtig abholen.



Zitat:Ps: Da ich eine interne Referensspannung von 4,096V habe und Spannungswert/Bit 0,0625mV ist (U=Vref/65536). Bekomme ich für 61440 3,84V raus (U=61440*0,0625mV)
..das passt soweit.

Zitat:hier ist mein geänderter Code: ähm ich ändere mal gleich mit...bk

#include <SPI.h>

int cs = 8;
unsigned long adcValueLSB; // warum long unsigned int reicht auch
unsigned long adcValueMSB; // dito
unsigned long adcValue; // dito

void setup(){
pinMode(cs, OUTPUT); // Pin cs (chip select) als Ausgang definiert
digitalWrite(cs, HIGH); // cs auf 1 setzen
SPI.begin(); // Startet die SPI-Bibliothek
// SPI.setDataMode(SPI_MODE0); // Setzt den SPI-Modus ###SPI Mode, nicht der vom ADC !!! ergo raus damit....
SPI.setClockDivider(SPI_CLOCK_DIV2); // Stellt die Geschwindigkeit ein
// SPI.setBitOrder(LSBFIRST); // schmeiss das mal raus MSBfirst scheint Standart zu sein !!! habs bei mir getestet.
Serial.begin(9600);
}

void loop()
{
digitalWrite(cs, LOW);
delayMicroseconds(500);
SPI.transfer(0x95); // UPDATE...siehe Text
SPI.transfer(0x00); // UPDATE...siehe Text Fuellbyte senden
//delayMicroseconds(500); // Luxus mal ohne Testen....
adcValueLSB = SPI.transfer(0x00); // ob LSB zuerst oder MSB...einfach mal testen
adcValueMSB = SPI.transfer(0x00);
digitalWrite(cs, HIGH);
adcValue = adcValueMSB << 8;
adcValue = adcValue | adcValueLSB;

Serial.print("analog value =");
Serial.println(adcValue);
Serial.print('\n');
delay(1000);
}

lg
Andreas

...probiers mal so....ähm wurde wohl bissi gemischt von wegen qouten und direkt reinschreiben....denke mal du kommst damit zurecht...
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.04.2014, 09:39
Beitrag #24
RE: Wie programmiere ich ein externen AD-Wandler
Hi bk, ich hab den "SPI.transfer(0x95)" mit 10010101 gestestet. Wenn ich ein anderen Wert als 90 nehme, dann bekomme ich immer ein Wert 0 raus. Den SPI.setBitOrder hab ich jetzt auf MSB geändert, dann bekomme ich bei 1V Spannungseingang, den Wert 65535 raus, aslo 4,095V, aber bei "SPI.transfer(0x90)". Ich hab das Layout für mein ADC selber gestaltet, jetzt denke ich mir, dass ich da einen Fehler gemacht habe. Die Schaltung für den ADC habe ich wie im Datenblatt Figure 1 auf Seite 13 aufgebaut. Ich hab nur CH0 leer gelassen, also der Kanal bekommt keine 5V von mir.

Wäre dann der Code richtig? Ich hab nämlich nicht die Erfahrung um abzuwegen wo nun der Fehler liegt, Programm oder Layout.

Was meinst Du eigendlich mit "SPI.transfer(0x00); // UPDATE...siehe Text Fuellbyte senden" steht das im Datenblatt? Wenn ja, könntest Du mir bitte vielleicht die Seite nennen? Ich fine das nämlich nicht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Auf externen EEPROM schreiben diode1990 5 981 08.11.2015 22:57
Letzter Beitrag: diode1990
  AD-Wandler --> PWM alinakoch 0 1.486 03.02.2014 14:17
Letzter Beitrag: alinakoch

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste