Hjälp med telefontangentbord till PIC (16F877) teknik?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Hjälp med telefontangentbord till PIC (16F877) teknik?

Inlägg av ankan »

Någon som har tips på site där man kopplat ett telefontangentbord till en PIC med ASM kod? Har en av modellen där knapparna är uppdelade i kolumner och rader. Antar att det är den vanligaste varianten.
Vill använda RB4-RB7 eftersom jag kan använda interup då. Men har inte lyckats få det att fungera ordentligt ännu.
Någon som har någon bra teknik på hur man tar reda på vilken knapp som är nedtryckt när det väl har blivit interrupt och vad man bör tänka på?
Gärna siter med lite exempelkod i ASM skulle vara trevligt.
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

Interrupt tror jag tyvärr du kan glömma. Men jag vet inte, kanske går att lösa med interrupt med. vaknade för 12 minuter sedan så jag är inte så fräsch i skallen just nu :lol:

Vanligtvis när man driver/scannar av en matrix så läser du av varje kolumn för sig genom att skicka en etta till den och kolla vilket värde du får på raderna. Sen får du kolla igenom alla kolumnerna snabbt som attan så att den inte skulle missa om man trycker på en knapp :)

Nu när jag börjar tänka så inser jag nog att det skulle kunna fungera om du gör så och ansluter varje rad till en bunt ingångar med interrupt iofs. Men det lär bli lättare att göra på det "vanliga" sättet :)
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Det går men jag vet inte hur jag får fram vilken kolumn.

Inlägg av ankan »

Grejen är att det är en skoluppgift som vi har fått när vi håller på och lär oss att programmera 16F877 i ASM och då är det interup som gäller för att den ska kunna hålla på med annat under tiden.
RB4-RB7 gör avbrott om de förändras vilka är kopplade till "raderna"
RB2-RB0 är kopplade till kolumnerna med 0:or på utgångarna.
EFtersom jag har aktiverat pull-up motstånden på RB4-RB7 Har jag ettor där till jag trycker på någon knapp då den aktuella raden får en nolla.
Knepet är sedan hur jag sla göra för att få fram vilken kolumn.
Provade med att 1:sätta kolumn efter kolumn för att se när radingången blir 1111 igen men det funkar inte., :-(
danei
EF Sponsor
Inlägg: 26423
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Inlägg av danei »

Det borde funka
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Gör RB0-2 låga och koppla alla interrupt från RB4-7 till samma rutin.
När någon som helst knapp trycks ner så bör du ju hamna i den rutinen.
Nästa steg är att i den rutinen lägga RB0 låg och RB1-2 hög, och sedan scanna av RB4-7 och se om du får en 0:a på någon av dessa.
Får du ingen nolla, så sätter du RB0 hög och går vidare till RB1 som nu sätts hög. Gör återigen en scanning genom RB4-7 och se om du får en nolla på någon av dessa.
Får du en nolla någonstans så vet du ju vilken kolumn + rad det var som var nedtryckt!

Kan hända att jag blandat ihop 1 och 0 iom polluppen, men jag tror du förstår principen! :D

Lycka till!

Mvh
speakman
Skriv svar