Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Bascom][ATMEGA8] Przycisk - 2 funkcje

14 Aug 2008 18:32 2235 10
  • Level 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):
    Code:

    $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
    Czy Twoje urządzenia IoT są bezpieczne? [Webinar 22.06.2021, g.9.00]. Zarejestruj się za darmo
  • Level 16  
    nie wiem czy zadzial pisze z pamieci
    Code:
                     $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
    Code:
    Config PORTB = Output
  • Level 15  
    Dlaczego po
    Code:
     Config Portb =
    jest
    Code:
     Not Portb
    ?
  • Level 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]:

    Code:
    $regfile "m8def.dat"
    
    $crystal = 8000000

    Config Portb = Output
    Config portc.1 = input

    Do
             If Pinc.1 = 0 Then
             Portb = Not Portb
             End If
    Loop
  • Level 10  
    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:)
  • Level 16  
    Code:
     Portb = toggle Portb 


    ja programuje w mikropascalu i to dziala
    Code:
    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.
  • Level 32  
    Code:
    ....
    

    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.
  • Level 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...
  • Level 12  
    osnapus wrote:
    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
  • Level 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ć.
  • Level 32  
    Zmienia postać rzeczy a więc... musisz wykorzystać źródło zewnetrznego pzrerwania czyli INT. Podlacz przycisk do INT0 i wtedy wpisz:
    Code:


    ....
    Config INT0 = Low level
    On INT0 przycisk

    .........
    .....

    przycisk:
    ....
    ....
    ....

    return



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