-         

Ergebnis 1 bis 2 von 2

Thema: Atmega32 und MCP4922, Falscher DAC Output

  1. #1

    Atmega32 und MCP4922, Falscher DAC Output

    Anzeige

    Hallo,

    ich habe leider ein kleines Problem mit meinem MCP4922.
    Die Ansteuerung per SPI funktioniert, aber aus irgendeinem Grund ergeben die Daten die ich dem DAC sende nicht die richtigen Spannungen.
    Hier mein Bascom-Code
    Code:
    $regfile = "m32def.dat"
    $framesize = 40
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000
    $baud = 19200
    Enable Interrupts
    Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0       ' zum debuggen
    Config Portd.7 = Output
    
    Dim Spioutput As Word
    Dim Dacdata As Word
    Dim I As Word
    I = 0
    Portd.7 = 0
    Spioutput = 0
    Dacdata = 0
    
    'Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 64 , Noss = 0
    'testweise auf Softspi umgestellt, kein Unterschied
    Config Spi = Soft , Din = Pinb.6 , Dout = Portb.5 , Ss = Portb.2 , Clock = Portb.7 , Mode = 3 , Ss = None
    
    Spiinit
    
    Do                                                          'Main
    For I = 0 To 4095                                           ' entspricht &B0000_0000_0000_0000-0000_1111_1111_1111
    Dacdata = I
    Spioutput = 12288 + Dacdata                                 ' 12288 entspricht &B0011_0000_0000_0000
                                                                ' also GN=1(Vref*1) und SHDN auf 1 (disabled)
    Waitms 200                                                  ' damit man die Änderungen auch sehen kann
    Portd.7 = 0
    Waitus 20
    Spiout Spioutput , 2
    Waitus 20
    Portd.7 = 1
    Waitus 20
    
    Next I
    Loop
    
    'erwartet wird eine Sägezahnkurve von GND-5V
    Hier das genaue Problem :
    An den VoutA ist eine LED mit Vorwiderstand angeschlossen. Diese fadet zwar, allerdings viel zu schnell und mit grossen Helligkeitssprüngen. Gebe ich "Spioutput" auf der seriellen Schnittstelle aus, so fällt auf das die LED noch innerhalb der FOR schleife aus und angeht, wobei die Intervalle unterschiedlich lange sind.

    Ich werde das Gefühl nicht los das mein Datenformat für den DAC nicht stimmen (also die 12 Bit).
    Vielleicht seht ihr ja mehr als ich.

    MfG
    Burga

  2. #2

    Atmega32 und MCP4922, Falscher DAC Output

    So leute habe meinen Fehler gefunden.

    Habe jetzt das Senden an den DAC in 2 Schritte unterteilt und damit gelöst.

    Hier der Code :

    Code:
    $regfile = "m32def.dat"
    $framesize = 40
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000
    $baud = 19200
    Enable Interrupts
    Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0       ' zum debuggen
    Config Portd.7 = Output
    
    Dim Spioutputlsb As Byte
    Dim Spioutputmsb As Byte
    Dim I As Byte
    Dim J As Byte
    I = 0
    J = 0
    Portd.7 = 0
    Spioutputlsb = 0
    Spioutputmsb = 0
    
    
    Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 64 , Noss = 0
    'testweise auf Softspi umgestellt, kein Unterschied
    'Config Spi = Soft , Din = Pinb.6 , Dout = Portb.5 , Ss = Portb.2 , Clock = Portb.7 , Mode = 3 , Ss = None
    
    Spiinit
    Waitms 5
    Do                                                          'Main
    For J = 0 To 15
       For I = 0 To 255                                         ' entspricht &B_0000_0000-_1111_1111 und damit dem lowbyte
       Spioutputlsb = I
       Spioutputmsb = J + 48                                    'also GN=1(Vref*1) und SHDN auf 1 (disabled)
                                                                'entspricht entspricht &B_0011_0000-_0011_1111 und damit dem high byte
       Waitms 5                                                 ' damit man die Änderungen auch sehen kann
       Portd.7 = 0
       Waitus 1
       Spiout Spioutputmsb , 1
       Waitus 1
       Spiout Spioutputlsb , 1
       Waitus 1
       Portd.7 = 1
       Waitus 1
       Next I
    Next J
    Loop
    
    'erwartet wird eine Sägezahnkurve von GND-5V
    Anscheinend treten beim Senden von 2 Bytes Bitverschiebungen auf, die wohl erst auf einem digitalem Osziloskop auftauchen. Tja hab ich als Azubi nicht, Pech gehabt

    Hoffe trotzdem euch hiermit geholfen zu haben.
    Geändert von Burga (14.11.2011 um 22:00 Uhr) Grund: Typo

Ähnliche Themen

  1. ATmega32 an Port C & D problem config Output
    Von Skynet im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 01.03.2011, 22:09
  2. Falscher Rücksprung aus ISR
    Von Furtion im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 10.01.2009, 19:00
  3. Falscher PAckungsinhalt
    Von damaltor im Forum Asuro
    Antworten: 3
    Letzter Beitrag: 29.10.2006, 19:07
  4. [Asuro] Falscher Widerstand
    Von TimeRaider im Forum Asuro
    Antworten: 6
    Letzter Beitrag: 02.03.2006, 11:17
  5. Falscher sprung!!
    Von der noob2 im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 13
    Letzter Beitrag: 09.09.2004, 15:08

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •