PIC, varför inte... går det....?
Re: PIC, varför inte... går det....?
> Trycker jag på PORTA,0 så tänds PORTC,0 och släcks PORTC,5.
> Trycker jag på någon av de andra så tänds motsvarande LED.
Var det en fråga?
> Som har samma problem som PIC12F629... dvs inga analoga portar.
Vad är problemet med det?
> Trycker jag på någon av de andra så tänds motsvarande LED.
Var det en fråga?
> Som har samma problem som PIC12F629... dvs inga analoga portar.
Vad är problemet med det?
Re: PIC, varför inte... går det....?
Nej, ingen fråga.
Det är vad som borde hända, vad som är tänkt hända.
Om bit 0 i PORTA är set (1) så ska bit 0 i PORTC bli set (1) och bit 5 i PORTC bli clear (0).
Dvs trycker jag på knapp RA0 så tänds LED på RC0, och om LED på RC5 är tänd så släcks den.
Etc etc...
btfss PORTA,0 ; hoppa över nästa instruktion om PORTA,0 är hög (set)
goto $+3 ; fortsätt på instruktion tre steg nedan
bsf PORTC,0 ; set PORTC,0, dvs tänd denna LED
bcf PORTC,5 ; clear PORTC,5, dvs släck denna LED
Resten funkar enligt:
btfsc PORTA,1 ; hoppa över nästa instruktion om PORTA,1 är låg (clear)
bsf PORTC,1 ; set PORTC,0, dvs tänd denna LED
...och nu ser jag ett fel - det ska vara $+3, inte $-3...
Det är vad som borde hända, vad som är tänkt hända.
Om bit 0 i PORTA är set (1) så ska bit 0 i PORTC bli set (1) och bit 5 i PORTC bli clear (0).
Dvs trycker jag på knapp RA0 så tänds LED på RC0, och om LED på RC5 är tänd så släcks den.
Etc etc...
btfss PORTA,0 ; hoppa över nästa instruktion om PORTA,0 är hög (set)
goto $+3 ; fortsätt på instruktion tre steg nedan
bsf PORTC,0 ; set PORTC,0, dvs tänd denna LED
bcf PORTC,5 ; clear PORTC,5, dvs släck denna LED
Resten funkar enligt:
btfsc PORTA,1 ; hoppa över nästa instruktion om PORTA,1 är låg (clear)
bsf PORTC,1 ; set PORTC,0, dvs tänd denna LED
...och nu ser jag ett fel - det ska vara $+3, inte $-3...

Re: PIC, varför inte... går det....?
> ...och nu ser jag ett fel - det ska vara $+3, inte $-3...
Försök att aldrig använda rellativa hopp med "$".
Försök att aldrig använda rellativa hopp med "$".
Kod: Markera allt
btfss PORTA,0
goto $+3
bsf PORTC,0
bcf PORTC,5
Kod: Markera allt
btfss PORTA,0
goto check_pin1
bsf PORTC,0
bcf PORTC,5
check_pin1
btfsc PORTA,1
bsf PORTC,1
Re: PIC, varför inte... går det....?
OK, inga relativa goto.
Någon annan anledning än den uppenbara?
Fick för övrigt igång [high => set] på RA<5:2>...
...med pull-down motstånd.
Men RA<1:0> fortsätter göra... ingenting.
Någon annan anledning än den uppenbara?
Fick för övrigt igång [high => set] på RA<5:2>...
...med pull-down motstånd.
Men RA<1:0> fortsätter göra... ingenting.
Re: PIC, varför inte... går det....?
Sådär!
CMCON skulle ju vara 0x07, inte 0x05 som det står i databladet...
*suck*
Tack för hjälpen, ni som hjälpt till.
CMCON skulle ju vara 0x07, inte 0x05 som det står i databladet...
*suck*
Tack för hjälpen, ni som hjälpt till.

Re: PIC, varför inte... går det....?
> OK, inga relativa goto.
> Någon annan anledning än den uppenbara?
Främst det uppenbara anledningen att inte göra sådana missar som du gjorde.
Man får justera GOTO varje gång man lägger till eller tar bort instruktioner mellan.
> inte 0x05 som det står i databladet...
Var står det det?
> Någon annan anledning än den uppenbara?
Främst det uppenbara anledningen att inte göra sådana missar som du gjorde.
Man får justera GOTO varje gång man lägger till eller tar bort instruktioner mellan.
> inte 0x05 som det står i databladet...
Var står det det?
Re: PIC, varför inte... går det....?
Nja, jag gjorde inte det felet, visade det sig.
Det var när jag skrev in det här som det blev fel.
Inte i den egentliga programkoden.
Sid 21, Example 3-1.
Det var när jag skrev in det här som det blev fel.
Inte i den egentliga programkoden.
Sid 21, Example 3-1.
Med 0x05 får man istället "Multiplexed Input with Internal Reference and Output".MOVLW 05h ;Set RA<2:0> to
MOVWF CMCON ;digital I/O
Re: PIC, varför inte... går det....?
Visst ja, du hade ju bytt processor mitt i dessutom... 
Och ja, i databladet för 630 står det ju så i exemplet...

Och ja, i databladet för 630 står det ju så i exemplet...
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: PIC, varför inte... går det....?
Ah! Nu hänger jag med! Missade att det var PIC-byte för jag fick inte ihop det riktigt.
Bra att det fungerar Erik M
Fråga vidare, kanske kan hjälpa till med något i alla fall.
Bra att det fungerar Erik M

Fråga vidare, kanske kan hjälpa till med något i alla fall.
Re: PIC, varför inte... går det....?
Felet var att kod-exemplet, för PIC16F630, angav att CMCON skulle vara 0x05 för att stänga av komparatorn.
Det korrekta är att CMCON skall vara 0x07 för detta.
För motsvarande PIC12F629, som på samma vis inte heller har några analoga portar, står det korrekta 0x07.
Nå, fixat. Hoppas jag i alla fall...
Nästa kluring...
Hur många PC räknas det här under normala varvet...?
Har jag förstått rätt så ger btfss/btfsc två oavsett om man skuppar eller ej.
Dvs antingen så skippar man, då görs btf och nop, eller så görs btfss/c och (i detta fall) call.
Samma sak gäller decfsz/incfsz...
Dvs antingen skippar man, då görs dec/inc och nop, eller så görs dec/incfsz och (i detta fall) goto.
Båda goto sker i princip varje varv (de görs INTE 257 av 65'536 gånger, om jag tänkt rätt), dvs (i detta fall) försumbara 4m.
Sub-rutinerna i sig behöver inte räknas in i PC, inte i detta fallet.
Inte heller vad som händer när både DC1 och DC2 står på noll.
Hur många PC blir det?
Det korrekta är att CMCON skall vara 0x07 för detta.
För motsvarande PIC12F629, som på samma vis inte heller har några analoga portar, står det korrekta 0x07.
Nå, fixat. Hoppas jag i alla fall...

Nästa kluring...

Hur många PC räknas det här under normala varvet...?
Kod: Markera allt
Delay:
btfss LsenT
call doLeft
btfss RsenT
call doRight
decfsz DC1
goto Delay
decfsz DC2
goto Delay
Dvs antingen så skippar man, då görs btf och nop, eller så görs btfss/c och (i detta fall) call.
Samma sak gäller decfsz/incfsz...
Dvs antingen skippar man, då görs dec/inc och nop, eller så görs dec/incfsz och (i detta fall) goto.
Båda goto sker i princip varje varv (de görs INTE 257 av 65'536 gånger, om jag tänkt rätt), dvs (i detta fall) försumbara 4m.
Sub-rutinerna i sig behöver inte räknas in i PC, inte i detta fallet.
Inte heller vad som händer när både DC1 och DC2 står på noll.
Hur många PC blir det?
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: PIC, varför inte... går det....?
Vad står PC för? Processor Cycle?
Är det i så fall samma som klock-cykel eller instruktions-cykel?
Är det i så fall samma som klock-cykel eller instruktions-cykel?
Re: PIC, varför inte... går det....?
Instruktion.
Som i sin tur är delad i fyra delar, en per klockfrekvens.
Så en instruktionen per fyra klockor. Vanligen.
Som i sin tur är delad i fyra delar, en per klockfrekvens.
Så en instruktionen per fyra klockor. Vanligen.
Re: PIC, varför inte... går det....?
> Har jag förstått rätt så ger btfss/btfsc två oavsett om man skuppar eller ej.
> Dvs antingen så skippar man, då görs btf och nop, eller så görs btfss/c och (i detta fall) call.
Det blir enklare om du kollar på varje instruktion för sig.
"Skip" instruktioner (test, inc eller dec) tar 2 cykler vid "skip", annars 1 cykel.
Sen så tillkommer ju instruktionen efter vid "ej skip", och det beror ju då på
vad *det* är för något. CALL t.ex är *alltid* 2 cykler. Men det kan ju även vara
något helt annat som kan ha 1 cykel. Men i just ditt fall så blir det 2 eller 3 cykler.
> Dvs antingen så skippar man, då görs btf och nop, eller så görs btfss/c och (i detta fall) call.
Det blir enklare om du kollar på varje instruktion för sig.
"Skip" instruktioner (test, inc eller dec) tar 2 cykler vid "skip", annars 1 cykel.
Sen så tillkommer ju instruktionen efter vid "ej skip", och det beror ju då på
vad *det* är för något. CALL t.ex är *alltid* 2 cykler. Men det kan ju även vara
något helt annat som kan ha 1 cykel. Men i just ditt fall så blir det 2 eller 3 cykler.