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

[Mega8] PortyC.x Zmiana stanu wyjścia na pinach ADC

nouki 10 Lut 2009 21:35 1112 4
REKLAMA
  • #1 6131817
    nouki
    Poziom 25  
    Witam.

    Procesor jak w temacie problem to :

    Pc.5 i pc.4 jest do pomiaru reszta Pc.0 do pc.2 to wyjścia a pc.3 to wejście.
    Pomiar odbywa się normalnie na Pc.5 a a pc.4 jest stały i wynosi 512.75 jeśli chce zmienić stan portów Pc.0 do pc.2 nie ma reakcji (są w stanie niskim). Portc.3 dokonuje detekcji zera sieci i jest ok
    Czym to jest spowodowane? nie działają tylko te 3 porty.

     
    
    ....
    ..
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    ..
    .
    .
    
    Config   Portc.0 = Output                                     ' dioda4
     Led4 Alias   Portc.0
    
     Config Pinc.3 = Input
    Zero Alias Pinc.3                                           'zero sieci
    Set Pinc.3
    
    Config   Portc.2 = Output                                     ' zaza 1
     Faza1 Alias   Portc.2
    
    Config   Portc.1 = Output                                     ' zaza2
     Faza2 Alias   Portc.1
    
    do
    
    set faza1
    set faza2
    Set Led4
    
    Wait 4
    
    reset faza1
    reset faza2
    Reset Led4
    Wait 4
    loop
    


    Poprawiłem tytuł - regulamin p.11.1
    [zumek]
  • REKLAMA
  • #2 6132250
    kedzi1
    Poziom 18  
    Wychodzi na to, że po włączeniu ADC wszystkie wejścia analogowe tracą funkcjonalność zwykłego portu, mimo iż wybrany jako źródło dla ADC jest tylko jeden.
  • REKLAMA
  • #3 6132449
    nouki
    Poziom 25  
    posiedziałem nad tym nieco i zmniejszyłem ilość problemów.
    Został jeden i to najistotniejszy :)

    Wyjścia działają nim wejdę w pętle i odczytam wartość jak to uczynię to polecenia set Portc.x już nie działa.

    Proszę o rady.

    Dzięki
  • REKLAMA
  • #4 6133706
    wader_669
    Poziom 28  
    
     Config Pinc.3 = Input
    Zero Alias Pinc.3                                           'zero sieci
    Set Pinc.3 
    


    bym wywalil
    nastepnie zrobil pomiar, po tym dal stop adc
    
    
    dim wart_ac as word
    
    wart_ac = getadc(0)
    
    stop adc
    


    wytestu moze zadziala. Jeszcze wyjasnij jak masz podlaczone zasilanie do avcc
  • #5 6134842
    nouki
    Poziom 25  
    Więc tak Portc.0 zmiania stan Jedynie podczas gdy zapalaja sie inne czyli w momęcie
    Set Led1
    Set Led2
    Set Led3
    Set Led4
    '''''
    ''
    Jeśli tam wpisze faze1 i faze 2 to też pojawia się stan wysoki i niski
    Ale jak już trafi do pętli programu to nie działają te oprty jako wyjścia.

    program wyglada tak:

    
    $crystal = 8000000
    
    $regfile = "m8def.dat"
    Config Lcdbus = 4
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pd.3 , Db5 = Pd.2 , Db6 = Pd.1 , Db7 = Pd.0 , E = Pd.5 , Rs = Pd.6
    Cursor Off
    Cursor Noblink
    
    
    Config Timer0 = Timer , Prescale = 64
    Config Timer1 = Timer , Prescale = 1
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    
    Dim A1...
    ..
    .
    Config Portd.4 = Output
    Pod Alias Portd.4                                           'podswietlanie
    Reset Portd.4
    
    Config Portb.3 = Output                                     ' dioda1
    Led1 Alias Portb.3
    
    Config Portb.4 = Output                                     ' dioda2
      Led2 Alias Portb.4
    
    Config Portb.5 = Output                                     ' dioda3
     Led3 Alias Portb.5
    
    Config Portc.0 = Output                                     ' dioda4
     Led4 Alias Portc.0
     Set Portc.0
    
                            ' * * * Klawisze * * * *
    
    Config Pind.7 = Input
    S1 Alias Pind.7                                             ' on
    Set Pind.7
    
    Config Pinb.0 = Input
    S2 Alias Pinb.0                                             '+
    Set Pinb.0
    
    Config Pinb.1 = Input                                       '-
    S3 Alias Pinb.1
    Set Pinb.1
    
    
    Config Pinb.2 = Input
    S4 Alias Pinb.2                                             'off
    Set Pinb.2
    
    
               '*******     wyjscia wejscia **********
    ' Config Portc.3 = Input
    'Zero Alias Portc.3                                          'zero sieci
    
    
    Config Portc.2 = Output                                     ' zaza 1
     Faza1 Alias Portc.2
    
    Config Portc.1 = Output                                     ' zaza2
     Faza2 Alias Portc.1
    
    
    
                        '************ program *************
    Locate 1 , 1
    Lcd "****************"
    Locate 2 , 1
    Lcd "tyg: " ; E ; ";" ; D ; ":" ; C ; ":" ; B;
    Set Led1
    Set Led2
    Set Led3
    Set Led4
    
    
    Wait 4
    Reset Led1
    Reset Led2
    Reset Led3
    Reset Led4
    Cls
    Wait 1
    '''''''''''
    ''''
    '
    Home:
    
    
    Do
    
    I = Warprad
    U = Warnap
    
    Call Diody
    
    Warnap = Getadc(3)
    U = Warnap
    
    If U > 400 Then
    Set Pod
    Warnap = Getadc(3)
    Waitms 100
    Warprad = Getadc(5)
    I = Warprad
    U = Warnap
    
    Wait 1
    
    Locate 1 , 1
    Lcd "U = " ; U ; "a1 " ; B1 ; ";" ; A1;
    Locate 2 , 1
    Lcd "U = " ; I ; "a " ; A;
    
    Sub Diody
    If U < 399 Then
    Cls
    Reset Led2
    Reset Led3
    Reset Led4
    Reset Pod
    Reset Faza1
    Reset Faza2
    Toggle Led1
    End If
    
    If U > 400 Then
    Set Led1
    Set Faza1
    End If
    If U > 800 Then
    Reset Led1
    Set Faza1
    Set Led2
    Call Odlicz_godzine
    End If
    If S4 = 0 Then Call Przerwac
    
    If F2 = 1 Then Call Faza_2
    Reset Faza1
    Wait 1
    End Sub
    ...
    ..
    
    .
    



    Sprawdze dziś start i stop ADC zobaczymy co to zmieni.

    Nic to nie zmienia.
    Rozwiazałem to inaczej zmianiajac program i pisząc go w C i jest ok.
REKLAMA