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...