Forum: Mikrocontroller und Digitale Elektronik ATMega32 und AD7706 - SPI Problem - Bascom


von Marie L. (lendl)


Lesenswert?

Hallo Profis,

ich habe einige Probleme einen ATMega32 mit einem AD-Wandler AD7706 zu 
verheiraten.
Eines vorweg, ich bin Anfänger und das ist mein erster Post in diesem 
Forum. Also bitte entschuldigt eventuelle doofe Fragen oder Fehler 
meinerseits.

Mein Problem ist dass ich keine ordentlich Kommunikation zwischen dem 
7706 und meinem ATMega zustande bringe. Ich vermute den Fehler in der 
Clockrate, bin mir aber nicht sicher.

Aber ich fange am Besten mal mit der Verdratung an.

AD7706 --> ATMega32

SCLK - CLK
MCLK IN - Quartz 4 MHz
MCLK Out - Quartz 4 MHz
CS - GND
Reset - Vcc
AIN2(+) - Nicht beschaltet
AIN1(+) - Poti 0V bis 5V
AIN(-) - GND
REF IN(+) - 2,5 V
REF IN(-) - GND
AIN(-) - Nicht beschaltet
DRDY - Portd.3
DOUT - Miso
DIN - Mosi
Vdd - Vcc 5V
GND - GND

Der ATMega läuft mit einem 8 MHz Quartz

Das war mal die Verdrahtung, da gehe ich jetzt mal nicht von einem 
Fehler aus.
Jetzt mein Bascom Programm:
1
'**********************************************************
2
'* Test ATMega32 mit AD-Wandler AD7706
3
'**********************************************************
4
5
'Config allgemein:
6
$regfile = "m32def.dat"
7
$crystal = 8000000
8
$baud = 4800
9
'Config LCD
10
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0
11
Config Lcd = 16 * 2
12
Config Portc = Output
13
Reset Portc.1
14
Initlcd
15
Cursor Off
16
Cls
17
'Config SPI:
18
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 4
19
Spiinit
20
'Config Ports
21
Config Portd.3 = Input
22
Drdy Alias Portd.3
23
'Variablen
24
Dim Msb As Byte
25
Dim Lsb As Byte
26
Dim Ergebnis As Word
27
Dim X As Byte
28
29
'Kommunikation mit dem AD7706:
30
'Mitteilung ans Kommunikationsregister: nächste Operation Schreiben ins Setup-Register
31
X = &B00010000
32
Spiout X , 1
33
'Schreibzugriff auf Setup-Register
34
X = &B00000001
35
Spiout X , 1
36
'Mitteilung ans Kommunikationsregister: nächste Operation Schreiben ins Clock-Register
37
X = &B00100000
38
Spiout X , 1
39
'Schreibzugriff auf Clock-Register
40
X = &B00001101
41
Spiout X , 1
42
43
'Mess -schleife:
44
Do
45
46
Cls
47
Locate 1 , 1
48
Lcd "Start"
49
Wait 3
50
51
  'Mitteilung ans Kommunikationsregister: nächste Operation Lesen vom Data-Register
52
  X = &B00111000
53
  Spiout X , 1
54
55
56
   If Drdy = 0 Then
57
58
   Locate 2 , 1
59
   Lcd "DRDY = 0"
60
   Waitms 20
61
   Spiin Msb , 1
62
   Spiin Lsb , 1
63
   Locate 1 , 1
64
   Lcd "Msb: " ; Msb ; " " ; "Lsb:" ; Lsb ; " "
65
66
   Else
67
68
   Locate 2 , 1
69
   Lcd "DRDY = 1"
70
71
   End If
72
73
  Wait 3
74
  Ergebnis = Makeint(lsb , Msb)
75
  Locate 2 , 1
76
  Lcd "Ergebnis = " ; Ergebnis
77
78
79
Wait 3
80
Cls
81
Locate 1 , 1
82
Lcd "neue"
83
Locate 2 , 1
84
Lcd "Schleife"
85
Wait 3
86
87
Loop
88
End

Ich vermute an folgenden Punkten eventuelle Fehler:

Config SPI:
Polarität, Phase, Clockrate - hier bin ich mir nicht sicher ob das 
überhaupt stimmt

Schreibzugriff auf das Setup-Register:
Was bedeutet das letzte Bit, da werde ich aus dem Datenblatt nicht 
schlau

Schreibzugriff auf das Clockregister:
Da steige ich im Datenblatt gar nicht durch.
Ich brauch wohl den Teiler CLKDIV weil ich ja nen 4 MHz Quartz habe.
Beim CLK Bit bin ich mir schon nicht mehr sicher ob ich das brauche und 
bei den FS-Bits habe ich gar keine Ahnung was ich da einstellen soll.


Vielleicht hat ja einer von Euch schon mal mit dem 7706 zu tun gehabt 
und kann mir ein wenig unter die Arme greifen.
Ich wäre für jeden Tip dankbar!

Schönen Restsonntag noch...

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.