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

Woltomierz - jak wykonać?

SirKamil90 18 Lut 2009 00:03 2220 5
REKLAMA
  • #1 6166301
    SirKamil90
    Poziom 14  
    Witam serdecznie,
    może mi ktoś wytłumaczyć jak można zrealizować woltomierz w bascomie na AVR? Przecież przetwornik w Atmega8 może mierzyć napięcie jedynie z zakresu 0-5V.. A ja potrzebuje 0-30VChciałem to zrobić w ten sposób żeby zastosować dzielnik napięcia 1:6 a wartość odczytana pomnożyć przez 6 i wtedy byłby zakres 0-30V, ale coś chyba ze zmiennymi pokręciłem..

    Kod źródłowy:

    'program obslugi wbudowanego w mikrokontroler 10-bitowego przetwornika A/C

    $regfile = "m8def.dat"
    $crystal = 1000000

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portd.3 , Rs = Portd.2

    Config Adc = Single , Prescaler = Auto , Reference = Avcc

    Dim Wart_ac As Word
    Dim V As Single
    Dim Wart_nap As String * 3
    Dim Nap_wysw As String * 3
    Start Adc

    Do
    Wart_ac = Getadc(1)
    Cls
    Lcd Wart_ac

    Lowerline

    V = Wart_ac * 0.0049

    Wart_nap = Fusing(v , "#.&&")

    Nap_wysw = 6 * Wart_nap

    Lcd Nap_wysw

    Waitms 500

    Loop
    End


    Komunikat błędu:

    Woltomierz - jak wykonać?
  • REKLAMA
  • #2 6166341
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 6166987
    marek_Łódź
    Poziom 36  
    Nie da się pomnożyć stringa przez 6 :!: Trzeba pomnożyć wartość V i dopiero przekonwertować funkcją fusing.
  • REKLAMA
  • #4 6167108
    SirKamil90
    Poziom 14  
    Dziękuję wam bardzo za pomoc! Faktycznie najpierw pomnożyłem V * 6 i dopiero przekonvertowalem funkcją fusing.

    Tak wygląda prawidłowy kod w BASCOM na woltomierz (należy zastosować dzielnik napięcia 1:6):

    'program obslugi wbudowanego w mikrokontroler 10-bitowego przetwornika A/C
    
    $regfile = "m8def.dat"
    $crystal = 1000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portd.3 , Rs = Portd.2
    
    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 Wart_ac
    
       Lowerline
    
       V = Wart_ac * 0.0049
    
       V = V * 6
    
       Wart_nap = Fusing(v , "#.&&")
    
       Lcd "U = "
       Lcd Wart_nap
       Lcd " V"
    
       Waitms 500
    
    Loop
    End





    Pozdrawiam!
  • REKLAMA
  • #5 6167579
    marek_Łódź
    Poziom 36  
    Użycie cls w tej pętli powoduje migotanie napisów. Lepiej nie czyścić wyświetlacza w pętli (można użyć home, lowerline, upperline + ewentualnie dopisać spacje w przypadku zmiennej długości tekstu).
    np.
    do
      home
      lcd Wart_ac;"  ";
      ....
      ...
      lowerline
      Lcd "U = ";Wart_nap;" V " ;
    loop
  • #6 6167589
    SirKamil90
    Poziom 14  
    Tak, masz racje usunąłem już cls.



    marek_Łódź napisał:
    Użycie cls w tej pętli powoduje migotanie napisów. Lepiej nie czyścić wyświetlacza w pętli (można użyć home, lowerline, upperline + ewentualnie dopisać spacje w przypadku zmiennej długości tekstu).
    np.
    do
      home
      lcd Wart_ac;"  ";
      ....
      ...
      lowerline
      Lcd "U = ";Wart_nap;" V " ;
    loop
REKLAMA