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

[Bascom][ATMega8]Serout - brak nadawania w symulacji.

astony 03 Paź 2009 16:55 1185 3
REKLAMA
  • #1 7086421
    astony
    Poziom 14  
    Witam
    Próbuję zmierzyć trzy napięcia i wyslać je do atinny(lcd). Skompilowany HEX symuluję na AVRstudio i nie widać żadnego nadawania.
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 19200
    $sim
    Config Portc = Output
    Dim A As Byte
    Dim Channel1 As Byte
    Dim Channel2 As Byte
    Dim Channel3 As Byte
    Dim V0 As Word
    Dim V1 As Word
    Dim V2 As Word
    Dim V_0 As Single
    Dim V_1 As Single
    Dim V_2 As Single
    Dim Vout As Single
    Dim K As Single
    Dim I0 As Single
    Dim I_0 As Single
    Dim D As Single
    Dim _chr As String * 9
    Config Adc = Free , Prescaler = Auto , Reference = Internal
    Deflcdchar 0 , 32 , 14 , 17 , 17 , 17 , 14 , 27 , 32
    '************* START ************
    'Cls
    _chr = Chr(0)
    Start Adc
    Channel1 = 0                  ' napięcie wyjściowe
    Channel2 = 1                  'pobór prądu - spadek na oporze
    Channel3 = 2
    'Channel4 = 3                  'ograniczenie prądowe
    Set Portc
    K = 30 / 256                  'dzielnik R
    K = K * 100                   ' Nap.vref na strcie 2.56v
    D = 256 / 1023                'vref /1023
    D = D / 100
    Do
    Serout _chr , 9 , C , 2 , 19200 , 0 , 8 , 1
    V0 = Getadc(channel1)
    V_0 = V0 * D                  'd- jednostka ADC
    V_0 = V_0 * K
    Serout V_0 , 4 , C , 2 , 19200 , 0 , 8 , 1       '0
    V1 = Getadc(channel2)
    V_1 = V1 * D
    Serout V_1 , 4 , C , 2 , 19200 , 0 , 8 , 1     '0
    V2 = Getadc(channel3)
    V_2 = V2 * D
    Serout V_2 , 4 , C , 2 , 19200 , 0 , 8 , 1                       '0
    Vout = V_0 - V_1
    Serout Vout , 4 , C , 2 , 19200 , 0 , 8 , 1
    Loop
    

    Oczywiście, podczas symulacji wstawiam ADCH i ADCL.
    Jedyna zmiana występuje na ddrc2.
    Na czym polega mój błąd?
    Jak to zrobić poprawnie?
    Help -please !!

    Poprawiłem tytuł.
    [zumek]
  • REKLAMA
  • REKLAMA
  • Pomocny post
    #4 7086773
    ZbeeGin
    Poziom 39  
    Chcąc bezproblemowo zmieniać kanały powinieneś zostawić GETADC() i w konfiguracji zmienić na SINGLE.

    W trybie FREE przetwornik mierzy ciągle (ustawiając flagi przerwania ADIF po każdym pomiarze), a ostatni wynik będzie znajdował się w zmiennej specjalnej ADCD (typu Word). Jednak zmiana kanału pomiaru jest nieco problematyczna, bo kanały musiałbyś wybierać z wyprzedzeniem zmieniając rejestr ADMUX, pamiętając o pozostawieniu innych bitów nie służących do zmiany kanału multipleksera. Dlatego w tym trybie warto zmienić kanał po ustawieniu ADIF, skasować go, pierwszą kolejną konwersję opuścić i traktować dopiero następną jako właściwą. Dalsze wyjaśnienia: nota katalogowa, strona 200.
REKLAMA