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

[Atmega8][Bascom]ADC/AVCC/Aref

Matkas 29 Lis 2008 13:50 5464 29
REKLAMA
  • #1 5796840
    Matkas
    Poziom 15  
    Witam,
    mam zamiar zrobić prosty voltomierz na Atmega8. Znalazłem taki o to kod na elektrodzie.
    Mam pare prostych pytań. Nie znalazłem nic o Nich w googlach.
    Z tego co przeczytałem to do avcc podłączamy +5v, gdy będziemy uzywac portuC.
    Aref podłączamy do GND tak?
    Ale gdzie podłączamy np. baterie czy coś innego aby zmierzyć ile ma voltów?
    W tym schemacie np. baterie podłączamy do GND i Portc.1?

    $regfile = "m8def.dat"                                      '
    $crystal = 8000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.5 , Db7 = Portd.6 , E = Portd.0 , Rs = Portd.1
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Dim Wart_ac As Word
    Dim V As Single
    Dim Wart_nap As String * 3
    Start Adc
    Do
    Wart_ac = Getadc(1)
    Cls
    Lcd "wartosc napiecia"
    Lowerline
    V = Wart_ac * 0.0049
    Wart_nap = Fusing(v , "#.&&")
    Lcd Wart_nap
    Waitms 10
    Loop
    End

    Pozdrawiam
  • REKLAMA
  • #2 5796858
    don diego
    Poziom 32  
    Matkas napisał:
    Witam,
    Mam pare prostych pytań. Nie znalazłem nic o Nich w googlach.

    Może poszukaj w dokumentacji mikrokontrolera.
  • #3 5796916
    dzarek1
    Poziom 14  
    otwórz sobie datasheeta do procesora i zobacz pod którą nóżka masz przetwornik A/C
  • #4 5797342
    Matkas
    Poziom 15  
    Witam,

    czyli wychodzi na to ,że przetwornik A/C jest na nóżkach od pC.0 do Pc.5?

    Pozdrawiam
  • #5 5797531
    snow
    Poziom 31  
    Na to wychodzi
  • REKLAMA
  • Pomocny post
    #6 5797532
    dawid512
    Poziom 32  
    Skoro w nocie katalogowej tak jest to tak jest.
  • #7 5797555
    Matkas
    Poziom 15  
    Aha no to dobrze:-) To teraz prosze o odpowiedzi na reszte pytań:-)

    Do avcc podłączamy +5v tak?
    Aref podłączamy do GND przez kondensator, tak?
    W tym programie np. baterie podłączamy pod pc.1 i pod gnd?

    Pozdrawiam
  • Pomocny post
    #8 5797566
    dawid512
    Poziom 32  
    Zgadza się ale pamiętaj także o 100nF jak najbliżej uc na jego zasilaniu. AVCC warto dać przez cewkę np. 10uH do 5V. Możesz dać także 100nF między ADC1 i masę.
  • #10 5797595
    Matkas
    Poziom 15  
    Czy ten program ma prawo działać?

    $regfile = "m8def.dat"                                      '
    $crystal = 8000000
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Config Portb.1 = Output
    Dim Wart_ac As Word
    Dim V As Single
    Dim Wart_nap As String * 3
    Start Adc
    Do
    Wart_ac = Getadc(1)
    Cls
    Lcd "wartosc napiecia"
    Lowerline
    V = Wart_ac * 0.0049
    Wart_nap = Fusing(v , "#.&&")
    If V = 1 Then
    Portb.1 = 1
    
    End If
    
    Waitms 10
    Loop
    End
  • Pomocny post
    #11 5797626
    dawid512
    Poziom 32  
    Powinien ale cls daj przed petla a w niej zastosuj locate. Po za tym nie operuj warunkami na liczbach zmiennoprzecinkowych. Przelicz sobie jaka wartosc ma zmienna Wart_ac przy napieciu 1V i do niej napisz warunek.
  • REKLAMA
  • #13 5797657
    Matkas
    Poziom 15  
    dawid512 napisał:
    Powinien ale cls daj przed petla a w niej zastosuj locate. Po za tym nie operuj warunkami na liczbach zmiennoprzecinkowych. Przelicz sobie jaka wartosc ma zmienna Wart_ac przy napieciu 1V i do niej napisz warunek.


    Nie mam pojęcia jak to zrobic:P
  • Pomocny post
    #14 5797670
    dawid512
    Poziom 32  
    Mea culpa zapomniałem że mega8 ma wewnętrznie podciągnięte AVCC do VCC.

    Dodano po 4 [minuty]:

    A jak oblicza się to 0.0048? 5/1024=0.0048. Więc 1024/5= 204.8 z tym że operujemy na liczbach całkowitych więc 205.
  • #15 5797730
    Matkas
    Poziom 15  
    A czemu na 5?
  • Pomocny post
    #16 5797739
    dawid512
    Poziom 32  
    Bo maksymalnie na przetwornik możesz podać 5V a po za tym ty chcesz żeby warunek był spełniony gdy napięcie wyniesie 1V.
  • REKLAMA
  • #17 5797925
    Freddie Chopin
    Specjalista - Mikrokontrolery
    widze tutaj pelny chaos. do AREF podlaczacie kondensator, czyli odniesieniem moze byc jedynie 2.56V wewnetrzne, za to nagle wartosci liczycie wzgledem 5V... sorry, ale napisaliscie juz 15 postow, przy czym 100% informacji o ktore tutaj pytano jest do znalezienia w ... wiadomo czym, wiec RTFM.

    4\/3!!
  • Pomocny post
    #18 5798140
    dawid512
    Poziom 32  
    Freddie Chopin napisał:
    widze tutaj pelny chaos. do AREF podlaczacie kondensator, czyli odniesieniem moze byc jedynie 2.56V wewnetrzne, za to nagle wartosci liczycie wzgledem 5V... sorry, ale napisaliscie juz 15 postow, przy czym 100% informacji o ktore tutaj pytano jest do znalezienia w ... wiadomo czym, wiec RTFM.

    4\/3!!


    Kolega zna Bascoma?
    Reference = Avcc
  • #20 5799126
    Matkas
    Poziom 15  
    Witam,

    To zmienić te reference?

    przy avcc coś chyba nie dziala
    Może coś źle mam podłączone.

    GND podłączone do AGND i do Aref poprzez kondensator 100nF.
    Avcc podłączone pod +5v. Vcc(+) akumulatorka podłączam pod Pc.1 i (-) akumulatorka podłączam pod Aref.
    Coś jest źle podłączone?
    Gdy podłączam akumulatorek to niestety nic się nie dzieje.



    $regfile = "m8def.dat"                                      '
    $crystal = 8000000
    Config Adc = Free , Prescaler = Auto , Reference = Avcc
    Config Portb.1 = Output
    Dim Wart_ac As Word
    Dim V As Single
    Dim Wart_nap As String * 3
    Start Adc
    
    Do
    Wart_ac = Getadc(1)
    V = Wart_ac * 0.0049
    Wart_nap = Fusing(v , "#.&&")
    If V >= 200 Then
    Portb.1 = 1
    
    Else
    Portb.2 = 1
    Portb.3 = 1
    
    End If
    
    Waitms 10
    Loop
    End


    Pozdrawiam
  • #22 5799203
    Matkas
    Poziom 15  
    Nawet tak nic się nie dzieje:-)
  • #23 5799343
    Freddie Chopin
    Specjalista - Mikrokontrolery
    dawid512 napisał:
    Kolega zna Bascoma?

    no dobra, z tym odniesieniem sie zapedzilem - moze byc 5V ktore podane jest na AVCC. tak jak juz zauwazyl balu jest to jednak bezsensu, bo 'czystosc' tego napiecia to fikcja. dlatego zawsze lepiej zastosowac wewnetrzne zrodlo napiecia odniesienia.

    4\/3!!
  • #24 5799547
    yokoon
    Poziom 29  
    Matkas napisał:
    Nawet tak nic się nie dzieje:-)


    Witam
    W ostatnim kodzie zmień config adc na single.
  • #25 5799926
    Matkas
    Poziom 15  
    Niestety nadal nie działa. Podłączam akumulatorek(1,2v) pod GND i Portc.1. Może wyjscia procka sie spalily?

    Pozdrawiam
  • Pomocny post
    #26 5800385
    dawid512
    Poziom 32  
    Wcale się nie dziwię że nie działa, ciągle masz warunek na zmiennej V która jest zmiennoprzecinkowa i nigdy nie będzie wynosić 200 i powyżej. Chodzi ci o zmienną Wart_ac. Po za tym wyświetl to sobie na lcd.
  • #27 5800412
    Matkas
    Poziom 15  
    Nie mam jeszcze LCD:-) W tym tygodniu będe zamawiał. Dlatego narazie próbuje na diodach.
  • #28 5891122
    Matkas
    Poziom 15  
    Witam,
    po pewnym czasie powróce do tematu.
    W jaki sposób sprawdzić czy akumulatorek został już naładowany? Oczywiście chodzi mi o program. Nie wiem w jaki sposób to zrobić.
    Myślałem nad odłączeniem Go od ładowarki i poddaniu Go lekkiemu obciążeniu w celu sprawdzenia stanu naładowania.

    Pozdrawiam
  • Pomocny post
    #29 5891718
    dawid512
    Poziom 32  
    Dobrze myślisz więc tak zrób.
  • #30 5892748
    Matkas
    Poziom 15  
    Witam,
    napisałem taki kod. Niewiem czy dobrze obliczyłem to 246. Wg. mnie to :
    205 = 1v
    20,5 = 0.1v
    41 = 0.2v
    czyli 246 = 1,2v
    dobrze licze?

    A co do programu to nie mam pojęcia czy jest dobrze.
    I jeszcze pod jakie obciążenie dać akumulatorek i jak podłączyć akumulatorek pod Atmege. Dać jakiegoś triaka czy co?

    $regfile = "m8def.dat"                                      '
    $crystal = 8000000
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Config Portb.1 = Output                                     '* Czerwona
    Config Portb.2 = Output                                     '* Zielona
    Config Portb.3 = Output                                     'Wysyla sygnal do ladowania
    Config Portb.0 = Output                                     '* Obciazenie
    
    Dim Wart_ac As Word
    Dim V As Single
    
    Start Adc
    
    Do
    Wart_ac = Getadc(1)
    V = Wart_ac * 0.0049
    
    If Wart_ac < 246 Then                                       '* Sprawdza Stan naladowania akumulatorka
    Portb.1 = 1
    Portb.3 = 1
    
    Wait 3600
    End If
    
       If Wart_ac > 246 Then
    Portb.3 = 0
    Portb.0 = 1
    Wait 300
    
       Elseif Wart_ac < 246 Then
    
    Portb.3 = 1
    Portb.0 = 0
    
    
    End If
    
    If Wart_ac = 246 Then
    Portb.3 = 0
    Portb.1 = 0
    Portb.2 = 1
    End If
    
    Waitms 10
    Loop
    End


    Pozdrawiam
REKLAMA