logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Dac 12bit Mcp4822 obsługa tego przetwornika w Bascom

lanza1 03 Lut 2011 18:32 4285 8
REKLAMA
  • #1 9098178
    lanza1
    Poziom 11  
    Posty: 43
    Ocena: 19
    Jestem początkującym w mikroprocesorach, więc zwracam się do forumowiczów o małą podpowiedz oraz pomoc jak uruchomić i sterować przetwornikiem D/C MCP4822 za pomocą Atmegi 32 lub Atmega 8 w bascom. Przetwornik już udało mi się zdobyć, więc chciałbym go wykorzystać.
    Zamierzam stworzyć ;) kalibrator do zwykłych galwanometrów, woltomierzy wskazówkowych w zakresie od 0-200mV. Więc przetwornik 12bit w zupełności mi wystarczy. Uref będzie wynosiło 2,048V czyli skok będzie co 0,001V .
    Jeden z forumowiczów napisał kod, ale po części w a$m , a to już zbyt trudne dla mnie ,aby to przetłumaczyć na Bascom. Kolega nie podał wyprowadzeń pod jakie trzeba podłączyć MCP4822 do atmegi i jakim pinem zwiększać i zmniejszać napięcie.

    Jak podłączyć przetwornik do atmegi i zmieniać napięcie dwoma przyciskami? Proszę o pomoc .;) w kwestii wyświetlania wyniku na lcd oraz zastosowania impulsatora, to sobie poradzę.

    regfile = "m8def.dat"                                     
    $crystal = 12000000                                       
    Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = low , Phase = 1 , Clockrate = 4,  noss=0
    
    Spiinit
    
    Do
    Gosub Spi_nadaj
    Loop
    
    End
    
    Spi_nadaj:
    $asm
       ldi r16, 00011111                                       
       Out Spdr , R16
    Czekaj:
       sbis spsr,spif
       rjmp czekaj                                             
    
       ldi r16,11111111                                         
       Out Spdr , R16
    Czekaj1:
       sbis spsr,spif
       rjmp czekaj1
    $end Asm
    ret
  • REKLAMA
  • #2 9101167
    lanza1
    Poziom 11  
    Posty: 43
    Ocena: 19
    Prośba do admina, czy można przenieś mój post do "mikrokontroleryAVR"
  • Pomocny post
    #3 9101225
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    To tylko transmisja dwóch bajtów po SPI a gdzie są piny SPI to w PDF zobacz.
    Nie patrzyłem na PDF tego przetwornika ale z programu wynika ze wystarczy zamiast jedynek wstawic oczekiwaną wartosć 12 bitową

    Spi_nadaj: 
    $asm 
    ldi r16, 0001[color=red]1111[/color]
    Out Spdr , R16 
    Czekaj: 
    sbis spsr,spif 
    rjmp czekaj 
    
     
    ldi r16, [color=red]11111111[/color]
    Out Spdr , R16 
    Czekaj1: 
    sbis spsr,spif 
    rjmp czekaj1 
    $end Asm 
    ret
  • REKLAMA
  • Pomocny post
    #4 9103188
    piotr5000
    Poziom 21  
    Posty: 393
    Pomógł: 40
    Ocena: 30
    " Uref będzie wynosiło 2,048V czyli skok będzie co 0,001V ".
    Przetwornik 12- bitowy ma rozdzielczość 4096 ,
    czyli 0,0005 V ( 0,5 mV = 500 uV )
  • REKLAMA
  • Pomocny post
    #5 9103833
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    Witam

    Wszystkie szczegóły odnośnie transmisji masz na stronie 6 w postaci graficznej. Bardzo ładnie wszystko widać.
    W pierwszej kolejności ustawiasz pin CS i LDAC w stan wysoki a SCK w stan niski. Żeby rozpocząć transmisję do układu (DAC) ustawiasz stan niski na wyjściu CS następnie na wyjściu danych SI ustawiasz najbardziej znaczący bit dwunastobitowego słowa. Następnie zmieniasz stan wyjścia zegarowego SCK na stan wysoki a następnie na stan niski. W ten sposób generujesz zbocze, które zapisujesz pierwszy bit do przetwornika. Pozostaje Ci wykonać powyższą procedurę jeszcze jedenaście razy podając odpowiednie wartości 0 i 1 w odpowiednich miejscach. Na koniec pozostaje wyjście LDAC ustawić na krótki moment w stan niski a po krótkiej chwili spowrotem w stan wysoki co spowoduje przerzucenie wprowadzonej bitowo wartości z rejestru "na wyjście" co poskutkuje odpowiednią zmianą napięcia na wyjściu. To jest wersja na "piechotę". Bascom jak zauważyli przedmówcy oferuje gotową instrukcję a mianowicie SPIOUT. Poczytaj o tym w Helpie do Bascoma.

    --
    pozdrawiam
  • #6 9111698
    lanza1
    Poziom 11  
    Posty: 43
    Ocena: 19
    Witam..Dziękuję za podpowiedzi. Przyznam się ,że nie bardzo jeszcze rozumuję przesyłanie bitów, odczytywanie wykresów zegarowych, więc bez waszej pomocy nie pomogę sobie z napisaniem poprawnego kodu w bascomie do obsługi D/A

    Oto rysunek jak chciałbym podłączyć atmege do D/A:
    Nie dorysowałem rezystora, ale wyjście CS mcp 4822 podciągnięte do zasilania poprzez rezystor 10K

    Dac 12bit Mcp4822 obsługa tego przetwornika w Bascom

    Dodano po 16 [minuty]:

    Witam...Podłączyłem atmege według schematu powyżej, ale nie działa ;(

    zmieniając 0 na 1 nie ma też żadnej reakcji. napięcie jest około 2V na wyjściach.

    Dodano po 47 [sekundy]:

    Biorę się za pisanie nowego kodu ;(

    Dodano po 16 [minuty]:

    Witam Ponownie, piszę własny kod choć przyznam się, że nie mam jeszcze odpowiedniej wiedzy. Proszę o uwagi jeśli będą błędy.
    
    regfile = "m8def.dat"
    $crystal = 12000000
    config lcd = 20*4
    cursor of
    cls
    
    config potrb.1 = output
    config potrc.0 = output
    config portc.1 = output 
    Config Spi = Soft , Din = Pinb.4 , Dout = Portb.3 , Ss = None , Clock = Portb.5 
    
    Dim Uwy as Byte
    Dim Up as bit
    Dim down as bit
    
    up alias pinc.0
    down alias pinc.1
    
    Cs Alias Portb.1
    Clk Alias Portb.5 
    
    Uwy = 0
    
    Do
    set up
    set down
    
    Set Cs
    Reset Cs
    
    Shiftout Portb.3 , Clk , Uwy , 0
    
    if up = 0 then
    incr Uwy
    end if
    
    if down = 0 then
    decr Uwy 
    end if
    
    lcd" Uwy ="
    locate 1,7
    lcd Uwy
    
    loop
  • REKLAMA
  • #7 9119212
    lanza1
    Poziom 11  
    Posty: 43
    Ocena: 19
    No i lipa nic nie działa, szlak mnie trafia z niewiedzy...........
  • Pomocny post
    #8 9119520
    K_o_n_r_a_d
    Poziom 23  
    Posty: 318
    Pomógł: 86
    Ocena: 9
    1. Podłącz do portu uK pin /LDAC przetwornika.
    2. Użyj sprzętowego SPI.
    3. W podprogramie Spi_nadaj steruj programowo sygnałami /CS i /LDAC, czyli na początku /CS ustaw w stan niski, po wysłaniu 2 bajtów /CS w stan wysoki, dalej /LDAC w stan niski i po chwili /LDAC w stan wysoki.

    Przede wszystkim brakuje w Twoich kodach sterowania sygnałem /LDAC, bo nie masz go w ogóle podłączonego do uK.
  • #9 9165623
    lanza1
    Poziom 11  
    Posty: 43
    Ocena: 19
    Problem rozwiązany. Zamykam temat.
    Dziękuje za podpowiedzi ;)

Podsumowanie tematu

✨ Użytkownik poszukuje pomocy w zakresie obsługi przetwornika D/A MCP4822 za pomocą mikroprocesorów Atmega 32 lub Atmega 8 w języku Bascom. Celem jest stworzenie kalibratora dla galwanometrów i woltomierzy w zakresie 0-200mV, z napięciem odniesienia 2,048V. Forumowicze wskazują na konieczność użycia interfejsu SPI do przesyłania danych oraz podłączenia odpowiednich pinów, takich jak CS i LDAC. Użytkownik napotyka trudności w implementacji kodu, jednak po kilku próbach i wskazówkach od innych, problem zostaje rozwiązany.
Wygenerowane przez model językowy.
REKLAMA