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

[Bascom][ATMEGA8] Przycisk - 2 funkcje

bb5 14 Sie 2008 18:32 2364 10
  • #1 5439080
    bb5
    Poziom 15  
    Jak napisać pogram dla ATMEGA8 który po pierwszym naciśnięciu ustawiał by wszystkie porty na wejścia a po kolejnym na wyjścia?
    Czy może to być tak (przycisk podpięty do gnd i Port C1):
    
    $regfile "m8def.dat"
    $crystal = 8000000
    
    Do
    
             If Pinc.1 = 0 Then
             Config Portb = &B11111111
             End If
    
             If Pinc.1 = 0 Then
             Config Portb = &B00000000
             End If
    
    Loop
  • #2 5439094
    Vampir8
    Poziom 16  
    nie wiem czy zadzial pisze z pamieci
                     $regfile "m8def.dat"
    $crystal = 8000000
    
    Do
             If Pinc.1 = 0 Then
             Config Portb = Not Portb
             End If
    Loop

    i chyba jeszcze trzeba skonfigurowac port jako wyjscie
    Config PORTB = Output
  • #4 5439389
    Vampir8
    Poziom 16  
    Chyba "config" ma tam nie byc, config konfiguruje port jako wejsciowy lub wyjsciowy, a tobie chyba chodzi o stan wysoki na porci i stan niski??

    portb = not portb
    to jest negacja
    czyli na porcieb ustawiasz bity odwrotnosci bitow portub ;)

    a dziala to wogole?
    bo nie mam przy sobie kompilatora zeby spr.

    Dodano po 2 [minuty]:

    $regfile "m8def.dat"
    $crystal = 8000000
    
    Config Portb = Output
    Config portc.1 = input
    
    Do
             If Pinc.1 = 0 Then
             Portb = Not Portb
             End If
    Loop
  • #5 5439444
    grafiksaba
    Poziom 11  
    ja bym to zrobił inaczej, bo Twoje rozwiązanie według mnie nie zadziała. Według mnie najpierw wszystkie porty ustawisz jako wyjścia a zaraz potem jako wejścia. Ja bym to zrobił tak, utworzył dodatkową zmienną

    <code>



    dim kierunek_portu as bit

    do

    if pinc.1 = 0 then

    toggle kierunek_portu
    endif

    if kierunek portu = 1 then
    config porb = output
    else
    config portb = input
    endif
    loop
    end



    </code>

    a tak na marginesie to Config Portb = &B11111111
    to jest jako wejście czy wyjście, zawsze pisałem input output?:) Mało pisałem na razie:)
  • #6 5439454
    Vampir8
    Poziom 16  
     Portb = toggle Portb 


    ja programuje w mikropascalu i to dziala
    program button_test;	
    var oldstate : byte;
    begin
      DDRD:=$FF;
      while true do
        begin
          if Button(PORTB, 0, 1, 1) then oldstate := 255;
          if oldstate and Button(PORTB, 0, 1, 0) then
          begin
            PORTD := not(PORTD);
            oldstate := 0;
          end;
        end;
    end.
  • #7 5439555
    dawid512
    Poziom 32  
    ....
    
    config pinc.1 = input
    set portc.1
    
    declare sub we
    declare sub wy
    do
    
    if pinc.1 = 0 then
    gosub we
    end if
    
    loop
    end
    
    sub we
    
    DDRB = &B00000000
    DDRC = &B00000000
    DDRD = &B00000000 
    do
    
    if pinc.1 = 0 then
    gosub wy
    end if
    
    loop
    end sub
    
    sub wy
    
    DDRB = &B11111111
    DDRC = &B11111101
    DDRD = &B11111111
    
    do
    
    if pinc.1 = 0 then
    gosub we
    end if
    
    loop
    end sub
    


    Na szybko i z pamieci ale powinno dzialac.
  • #8 5439629
    osnapus
    Poziom 19  
    Panowie a co z tym że w czasie trzymania przycisku program będzie bez przerwy wykonywał przełączanie... Bo przecież w takiej konfiguracji jak piszecie to jedno krótkie dla człowieka naciśnięcie przycisku to będzie kilka wykonanych cykli zmiany wyjść na wejścia i odwrotnie...
  • #9 5439740
    n01x
    Poziom 12  
    osnapus napisał:
    Panowie a co z tym że w czasie trzymania przycisku program będzie bez przerwy wykonywał przełączanie... Bo przecież w takiej konfiguracji jak piszecie to jedno krótkie dla człowieka naciśnięcie przycisku to będzie kilka wykonanych cykli zmiany wyjść na wejścia i odwrotnie...


    while...wend
  • #10 5440803
    bb5
    Poziom 15  
    Może powiem do czego potrzebuje ten program. Buduję sekundnik na dwóch wyświetlaczach 7-segmentowych, ATMEDZE8 i przycisku. I miał by on działać na takiej zasadzie: jak naduszę przycisk to zaczyna naliczać sekundy jak naduszę drugi raz to zatrzyma naliczanie.
    Przez cały czas cyferki mają się wyświetlać.
  • #11 5445523
    dawid512
    Poziom 32  
    Zmienia postać rzeczy a więc... musisz wykorzystać źródło zewnetrznego pzrerwania czyli INT. Podlacz przycisk do INT0 i wtedy wpisz:
    
    
    ....
    Config INT0 = Low level
    On INT0 przycisk
    
    .........
    .....
    
    przycisk:
    ....
    ....
    ....
    
    return
    
    


    Teraz wpisz tylko co ma się wykonywać w przerwaniu które wywoła nacisniecia przyckisku ;)
REKLAMA