Hi,
ich möchte den Drucksensor MS5534 an einen Atmega8 betreiben doch irgendwie weigert der sich ^^. Da der Sensor nur mit max 3,6V betrieben werden darf und der Atmega8 5V benötigt habe ich die 4 Leitungen durche einen Optokoppler (PC817) getrennt und jeder hat seine Spannung, beide sind mit Masse verbunden. "Sclk" und "Dout" (am Atmegahabe ich mit einem Oszi überbrüft oder um genauer zu sein ein Programm auf dem PC was die Sounkarte als eingang benutzt. Die Signale stimmen mit denen im Datenblatt überein. Die Beiden Signale habe ich auch auf der anderen Seite des Optokoppler (zum Sensor) überprüft um einen Defekt auszuschließen. Was ich nicht überprüfen kann ist "MCLK" da das Programm nur bis 20kHz darstellen kann. "Mclk" erstelle ich mit dem Timer1 und lasse ihn einfach laufen da er das selbständig kann ohne das Main Programm zu unterbrechen. Um auszuschließen das "Mclk" eine falsche Frequenz ist habe ich mir von ELV den Geschwindigkeitssensor VAT 300 GS gekauft. Das ist der selbe Sensor in verbindung mit einem Atmega8L der für 3,6V ist. (Leider kann ich mit dem Signal, was der Atmega8L sendet, nix anfangen) Der Atmega8L generiert "Mclk" für den Sensor und ich greife den einfach ab um den selben bei meinem Sensor zu benutzen.
http://www.elv-downloads.de/service/...M_G_040413.pdf
http://www.amsys.de/sheets/amsys.de.ms5534c(e).pdf
Um das ganze erst einmal einfach an zu gehen, wollte ich nur D1 auslesen was im Datenblatt Fig.6a zeigt. Wie man sieht soll "Dout" von 1 auf 0 wechseln und wieder zurück wenn es die Setup Bits bekommt. Aber der Ausgang am Sensor "Dout" (verbunden am Atmega8 mit "Din") ist und bleibt auf 0 und ist auch nicht wie zu sehen wenn es nix zu tun gibt auf 1.Code:'---------------------------------------------------------- $regfile = "m8def.dat" 'ATmega8-Deklarationen $crystal = 8000000 $baud = 9600 'Baudrate zum PC Ddrb.2 = 1 'ausgang Ddrb.3 = 0 'eingang Portb.3 = 0 'pullup widerstand aus Ddrb.4 = 1 'ausgang ' Dout Alias Portb.2 ' DOUT = DIN MS5534 Din Alias Portb.3 ' DIN = DOUT MS5534 Sclk Alias Portb.4 ' SCLK = Sclk MS5534 ' Reset Dout Reset Sclk Dim Dat_00 As Byte ' Zwischenspeicher Daten Dim Dat_01 As Byte 'Taktsignal '=========================== Ddrb.1 = 1 'Pin PB1/OC1A ist Ausgang ' Tccr1a = &B01000000 'Pin OC1A/PB1 togglen, kein PWM Tccr1b = &B00001001 'Timer-Reset bei Compare, Clock/1 ' Compare1a = 250 'Vergleichswert setzen (OCR1AH+OCR1AL) Do Wait 1 Print "Start "; '=== D1 Set Dout Delay 'Bit 0 Set Sclk Delay Reset Sclk Delay 'Bit 1 Set Sclk Delay Reset Sclk Delay 'Bit 2 Set Sclk Delay Reset Sclk Delay 'Bit 3 Set Sclk Delay Reset Sclk 'Delay Reset Dout Delay 'Bit 4 Set Sclk Delay Reset Sclk 'Delay Set Dout Delay 'Bit 5 Set Sclk Delay Reset Sclk 'Delay Reset Dout Delay 'Bit 6 Set Sclk Delay Reset Sclk Delay 'Bit 7 Set Sclk Delay Reset Sclk Delay 'Bit 8 Set Sclk Delay Reset Sclk Delay 'Bit 9 Set Sclk Delay Reset Sclk Delay '2 Takte bis conversion Set Sclk Delay Reset Sclk Delay Set Sclk Delay Reset Sclk Delay Waitms 40 If Portb.3 = 0 Then Print "ok "; 'Daten empfangen ersten 8 Bit Dat_00 = 0 'Bit 7 Set Sclk Delay Reset Sclk Dat_00.0 = Din Rotate Dat_00 , Left , 1 Delay 'Bit 6 Set Sclk Delay Reset Sclk Dat_00.0 = Din Rotate Dat_00 , Left , 1 Delay 'Bit 5 Set Sclk Delay Reset Sclk Dat_00.0 = Din Rotate Dat_00 , Left , 1 Delay 'Bit 4 Set Sclk Delay Reset Sclk Dat_00.0 = Din Rotate Dat_00 , Left , 1 Delay 'Bit 3 Set Sclk Delay Reset Sclk Dat_00.0 = Din Rotate Dat_00 , Left , 1 Delay 'Bit 2 Set Sclk Delay Reset Sclk Dat_00.0 = Din Rotate Dat_00 , Left , 1 Delay 'Bit 1 Set Sclk Delay Reset Sclk Dat_00.0 = Din Rotate Dat_00 , Left , 1 Delay 'Bit 0 Set Sclk Delay Reset Sclk Dat_00.0 = Din Rotate Dat_00 , Left , 1 Delay 'Daten empfangen zweiten 8 Bit Dat_01 = 0 'Bit 7 Set Sclk Delay Reset Sclk Dat_01.0 = Din Rotate Dat_01 , Left , 1 Delay 'Bit 6 Set Sclk Delay Reset Sclk Dat_01.0 = Din Rotate Dat_01 , Left , 1 Delay 'Bit 5 Set Sclk Delay Reset Sclk Dat_01.0 = Din Rotate Dat_01 , Left , 1 Delay 'Bit 4 Set Sclk Delay Reset Sclk Dat_01.0 = Din Rotate Dat_01 , Left , 1 Delay 'Bit 3 Set Sclk Delay Reset Sclk Dat_01.0 = Din Rotate Dat_01 , Left , 1 Delay 'Bit 2 Set Sclk Delay Reset Sclk Dat_01.0 = Din Rotate Dat_01 , Left , 1 Delay 'Bit 1 Set Sclk Delay Reset Sclk Dat_01.0 = Din Rotate Dat_01 , Left , 1 Delay 'Bit 0 Set Sclk Delay Reset Sclk Dat_01.0 = Din Rotate Dat_01 , Left , 1 Delay 'letzter Tankt Set Sclk Delay Reset Sclk Delay Print Dat_00; Print Dat_01; Wait 1 Loop End
Den Sensor habe ich schon mit dem auf der Platine von ELV gewechselt und da funktioniert er, also ist er nicht defekt.
Ich bin nu leider am Ende meines Latein, kann mir wer helfen Bitte![]()







Zitieren

Lesezeichen