Jag har sökt men iten hittat nått svar varken här eller på google (har ni någon länk till ett liknande bra exempel så posta gärna den)
Jag har kopplat en knapp till RB4 när denna är nedtryckt ska programmet utföras som står i if-satsen. Men när jag trycker på knappen så händer ingentin (förutom att RC0 fortfarande är hög). Den verkar alltås inte känna av knapptryckningen. Verkar det finnas något fel i koden? Och är det så att ingången känner av om det ligger en spänning på ingången och vet att den är 1 då?
> Jag har sökt men iten hittat nått svar varken här eller på google
Du letar på helt fel ställen, databladet har svaret.
Dessutom kan du enkelt kolla vilken kod som ditt lilla program
genererar och sannolikt ganska snabbt se om det gör det som du tror.
Glömde detta. Såhär är iallfall knappen inkopplad:
När jag mäter mellan knappen(RB4 sidan av knappen) när den är nedtryckt och till jord så har jag en spänning på 4,9V mäter jag mellan RB4 och +5V så har jag ingen spänning. Tänkte då att jag hade tänkt fel och kollade meller RB4 och jord men även noll där vilket det borde vara efter som den är en ingång. Så därför tänkte jag att det borde vara nått i koden.
Felkopplat.
10 kohm ska ligga direkt från 5V till RB4.
Och knappen mellan RB4 och GND.
Har du funderat på vad som händer då knappen *inte* är
nertryckt ? Ingången är "öppen" vilket den aldrig får vara...
> ...och kollade meller RB4 och jord men
> även noll där vilket det borde vara efter som den är en ingång.
Ok hur tänkte jag fel där? (kan vara bra att veta varför också för att lära sig nått.)
Jag har iallfall kopplat det så som ni beskrivit och det fungerar fortfarande inte. När man trycker in knappen blir det 0 volt mellan pinnen och jorde vilket borde innebära att RB4 blir en nolla och därmed uppfyller if-statmentet(har ändrat så det står RB4==0, kanske är det detta du menar med "feltänkt"?). Har läst lite om interrupt, vad är skillnaden på interrupt och denna metoden jag försöker köra?
> Jag har iallfall kopplat det så som ni beskrivit och det fungerar fortfarande inte.
Nej, och det var det ingen som sa heller. Vi sa bara att det var felkopplat, inte
att det skulle fungera om du kopplade rätt, det kan ju vara helt andra fel också.
> Har läst lite om interrupt, vad är skillnaden på interrupt och denna metoden jag försöker köra?
Jag har inte kollat hur du försöker göra, men generellt brukar man skilja
på metoderna interrupt resp pollning.
> kanske är det detta du menar med "feltänkt"?)
Nej, det var "...men även noll där vilket det borde vara efter som den är en ingång."
som var feltänkt.
Som du har kodat nu innebär det att PICen hela tiden kollar om RB4 är tänd, dvs. all processorkraft går åt att köra while-loopen hela tiden.
Med interrupt så kan man göra annat under tiden och bara när t.ex. RB4 så kommer den exekvera en viss kod.
Man kan jämföra detta med en ringsignal på mobil. Om du inte hade haft någon indikation på att någon ringer så måste du hela tiden kolla på telefonen om någon ringer dig. Med interrupt så får du en ringsignal/vibration som talar om att någon ringer dig. Typ...
Jag gissar att det handlar om en PIC-processor ?
Kan man verkligen adressera en bit direkt i en PIC med RC0=0; // nollställa bit i port
eller med (RB4==1) // läsa av bit i port
???
I AVR-världen är beteckningarna PB1 osv.. bara konstanter som anger bitens position.
Annars tror jag det är en bra väg att börja med polling - sen, när man behärskar den metoden kan man ju försöka sig på interrupt om man vill.
> Kan man verkligen adressera en bit direkt i en PIC med.....
Det har ju inte något med processorn att göra, utan det beror helt
vilken kod som olika kompilatorer väljer att generera. Det är ju helt
upp till kompilatorn hur den väljer att göra.
I det här fallet är det väl inte något som handlar om att kompilatorn väljer att göra något, det måste ju till 100% handla om hur RB4 är definierat i include-filerna? Jag gissar att det är ett makro som gör att det går att använda sådär. Men jag är nyfiken på hur de lyckas få tilldelningsoperationen att fungera.
> det måste ju [...] handla om hur RB4 är definierat i include-filerna?
Och vad kompilatorn väljer att göra av det, så klart.
Men, vi vet ju inte ens vilken kompilator det är, så det blir bara spekulationer.
> Men jag är nyfiken på hur de lyckas få tilldelningsoperationen att fungera.
Jag ser inget problem, det är bara att generera rätt BCF eller BSF instruktion
när en tilldelning till (t.ex) RB4 dyker upp i koden. Eller rätt BTFSC/BTFSS
när en test sker på t.ex RB4. Varför skulle det vara ett problem ?
RB4 måste ju på något sätt expanderas till C-kod (det är ju en C-kompilator), och jag kan inte komma på nån C-kod som fungerar som avsett. Just därför är jag alltså väldigt nyfiken på hur de får det att fungera.
Problemet här är ju det sätt som C-kompilatorer jobbar på.