Nybörjarhjälp P12F683

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
ylle
Inlägg: 669
Blev medlem: 5 oktober 2006, 20:18:27
Ort: örebro

Nybörjarhjälp P12F683

Inlägg av ylle »

Får ett felmeddelande att argument saknas på rad 12, men rad 12 är en call och jag har flyttat runt koden och lagt in NOPar lite här och där för att flytta felet men det sitter kvar.

Troligen ett nybörjarfel eller skit bakom spakarna

En "kitscan" hittade iden på madmodders sida
12 st charlieplexkopplade led på gp1,2,4,5. gp0 ska kopplas till en pot för att justera hastighet, gp3(mclr) ska kopplas till hdd-led

är inte helt säker på syntaxen på bsf och bcf, har provat att köra med
movlw b'001011'
movwf GPIO
men får exact samma felmeddelande

Kod: Markera allt

#include <p12F683.inc>
     __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _IESO_OFF & _FCMEN_OFF)
     org 0
Start:
	bsf		STATUS,RP0
	movlw	b'00000111'  ;init timer0 med max prescale
	movwf	OPTION_REG
	movlw 	b'001001' 	;1245 ut, 3/mclr in, 0 analog in
	tris 	GPIO
	bcf		STATUS,RP0
Mainloop:
	call par12	;kör led-par 12
	call par24	;kör led-par 24
	call par45	;osv..
	call par14
	call par25
	call par15	;sista paret, byt håll
	call par25
	call par14
	call par45
	call par24
goto Mainloop
;tri 0 och 3 alltid höga 001001
par12
	bsf		STATUS,RP0
	movlw 	b'001111' 	;3210
	tris 	GPIO
	bcf		STATUS,RP0
		bsf GP1	;fram
		bcf GP2
	call delay1
		bcf GP1	;tillbaka
		bsf GP2
	call delay1
return
par24
	bsf		STATUS,RP0
	movlw 	b'011101' 	;4320
	tris 	GPIO
	bcf		STATUS,RP0
		bsf GP2
		bcf GP4
	call delay1
		bcf GP2
		bsf GP4
	call delay1	
return
par45
	bsf		STATUS,RP0
	movlw 	b'111001' 	;5430
	tris 	GPIO
	bcf		STATUS,RP0
		bsf GP4
		bcf GP5
	call delay1
		bcf GP4
		bsf GP5
	call delay1	
return
par14
	bsf		STATUS,RP0
	movlw 	b'001111' 	;3210
	tris 	GPIO
	bcf		STATUS,RP0
		bsf GP1
		bcf GP4
	call delay1
		bcf GP1
		bsf GP4
	call delay1	
return
par25
	bsf		STATUS,RP0
	movlw 	b'101101' 	;5320
	tris 	GPIO
	bcf		STATUS,RP0
		bsf GP2
		bcf GP5
	call delay1
		bcf GP2
		bsf GP5
	call delay1
return
par15
	bsf		STATUS,RP0
	movlw 	b'101011' 	;3210
	tris 	GPIO
	bcf		STATUS,RP0
		bsf GP1
		bcf GP5
	call delay1
		bcf GP1
		bsf GP5
	call delay1		
return

delay1
	btfss	INTCON,T0IF
	goto 	$-1
	bcf		INTCON,T0IF
	;om gp3 hög kör delay2
	return

delay2
	btfss	INTCON,T0IF
	goto 	$-1
	bcf		INTCON,T0IF
	return

     end
     
använder mplab 8.10 och pickit2
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Nybörjarhjälp P12F683

Inlägg av Icecap »

Vad gör "tris GPIO"?
Den instruktion är mycket konstig för mig. "tris" är ett register liksom "GPIO". Jag har inte pillat med PIC12 så jag kan ha missuppfattat.

Men hur som helst, det är brukligt att man utpekar felet i koden, t.ex. vid att markera i kommentarer.
Användarvisningsbild
ylle
Inlägg: 669
Blev medlem: 5 oktober 2006, 20:18:27
Ort: örebro

Re: Nybörjarhjälp P12F683

Inlägg av ylle »

movlw b'001001' ;1245 ut, 3/mclr in, 0 analog in
tris GPIO

Den sätter tristate på io pinnarna.
Problemet är att jag inte vet var felet sitter, då har jag kunna felsökt bättre.
Felet sitter på rad 12 oavsett om jag lägger 3,4,5 nop före eller flyttar koden från proceduren istället för att använda call.
Hade jag kunnat lista ut på vilken rad felet satt har jag nog fixat det till sist, men nu har jag ingen aning om i vilken ände jag ska börja.
I värsta fall får jag skriva om programmet rad för rad och testa till felet kommer fram
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Nybörjarhjälp P12F683

Inlägg av vfr »

TRIS är en gammal kvarleva från den gamla 12-bitars PIC-arkitekturen. Det är alltså en instruktion som gör motsvarande vad registret TRIS gör idag. Detta var just en PIC12 så då är det den gamla arkitekturen som gäller.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Nybörjarhjälp P12F683

Inlägg av Icecap »

Men "tris GPIO" sätter TRIS-registret med värdet av adressen av GPIO eller hur?
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Nybörjarhjälp P12F683

Inlägg av vfr »

Utan att titta närmare i gömmorna så skulle jag spontant säga "Ja".

Ylle> På det viset så kan det inte bli något bra av det. Det är värdet du skall ha som parameter, inte registret.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjarhjälp P12F683

Inlägg av sodjan »

> Detta var just en PIC12 så då är det den gamla arkitekturen som gäller.

Fel. Det gäller PIC12F5xx och de andra "Baseline PICs".

12F683 är en vanlig "Midrange PIC", precis som alla andra PIC16.
12F683 ligger i samma familj/generation som 16F886, 16F88 o.s.v.
Nanowatt, 1% INTOSC och hela köret, Väldigt trevlig modell.

Så vitt jag kommer ihåg (databladet har svaret för den som *måste* veta)
så använder man vanliga MOVLW, MOVWF för att sätta TRIS på dessa.
TRIS, OPTION o.s.v som användes på "Baseline" (därför att dessa register
inte var minnes-mappade direkt) behövs inte.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjarhjälp P12F683

Inlägg av sodjan »

Kollade just databladet för 12F683 ocxh TRIS är inte ens listat som
en giltig instruktion. Så det är bara att RTFM, göra om och göra rätt...
Användarvisningsbild
ylle
Inlägg: 669
Blev medlem: 5 oktober 2006, 20:18:27
Ort: örebro

Re: Nybörjarhjälp P12F683

Inlägg av ylle »

Har nu lusläst databladet och ändrat en hel del.
Fick fortfarande saknar argument på rad 12 fel hela tiden, hittade till slut felet
När jag gör stora ändringar så brukar jag allteftersom döpa om filer under tiden till .v2.asm .v3.asm osv
bara det att mplab har fortsatt försökt kompilera första filen. Efter många färgstarka invektiv så gjorde jag helt nytt projekt och la in den nya asm filen och får då

Error - Coff file './12ledcharlieplex.v2.o' could not read string table.
Errors : 1

Link step failed.

Tror jag skiter i det här för ikväll o öppnar en öl istället
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Nybörjarhjälp P12F683

Inlägg av bos »

Jag klipper ut en slumpval bit ur din kod och tar fram rödpennan:

Kod: Markera allt

   bsf      STATUS,RP0
   movlw    b'001111'    ;3210
   tris    GPIO
   bcf      STATUS,RP0
      bsf GP1   ;fram
      bcf GP2
Jag vet inte hur MPLAB gör när man inte har åtta bitar i ett binärtal, men jag skulle ändra b'001111' till b'00001111' istället för att vara på säkra sidan och för att vara mer tydlig. Det är lättare för människor att räkna med åtta bitar än sex, även om MPLAB skulle hantera talet korrekt.

Du gör rätt med bsf/bcf för status-registret, men helt fel för GP1 och GP2 såvida du inte har en #define GP1 GPIO,1 gömd nånstans i någon include-fil. Du skriver att du får felmeddelande på rad 12 om att argument saknas, så jag misstänker att det är detta. Vill du sätta GP1 så skriver du "bsf GPIO, 1".

Istället för att manuellt sätta RP0/RP1 i status-registret så rekommenderar jag att du använder "banksel" istället. Exempel: "banksel GPIO" ser till att statusbitarna är korrekt för att du ska rota i GPIO.

Slutligen, släng "tris" åt fanders. Använd registret TRISIO istället:

Kod: Markera allt

banksel TRISIO
movlw    b'00001111'    ;3210
movwf TRISIO
banksel GPIO
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjarhjälp P12F683

Inlägg av sodjan »

> Har nu lusläst databladet och ändrat en hel del.

Exakt *vad* har du ändrat och till vad ?

> Fick fortfarande saknar argument på rad 12 fel hela tiden,

Och vad 17 står det på rad 12 ??

> Error - Coff file './12ledcharlieplex.v2.o' could not read string table.

Är det det *enda* felet du får ?
Vad är det för källkod som ger detta fel ?
Har du rensat bort ogiltiga instruktioner (som TRIS)
och fixat de där felaktiga BCF/BSF instruktionena ?

Det är förb--nat dålig stil att inte kommentera de förslag och uppmaningar
till ändringar som du redan har fått i tidigare inlägg. Det blir ju då helt
meninslöst att försöka hjälpa till om du inte lyssnar...

bos > Vill du sätta GP1 så skriver du "bsf GPIO, 1".

Notera att även bitarna har symboler så även "BSF GPIO, GP1" fungerar OK...
Användarvisningsbild
ylle
Inlägg: 669
Blev medlem: 5 oktober 2006, 20:18:27
Ort: örebro

Re: Nybörjarhjälp P12F683

Inlägg av ylle »

Har provat alla förslag jag fått, flera gånger men det har hittills inte funkat

Som jag skrev i mitt sista inlägg, OCH inläggen innan. Jag har flyttat runt på koden till förbannelse så det stått allt från call, nop, bsf, enbart kommentar, tom rad och annat på rad 16 och felmeddelandet har ändå varenda gång varit det samma. att argument saknas på rad 16.

Skrev också i förra inlägget att jag hittat vad det beror på. Jag tog bort asm filen från workspace och la in en annan och ÄNDÅ så har mplab kompilerat den första asm filen jag skrev. Därav har jag inte kunnat felsöka. Hade mplab kompilerat den filen jag lagt till istället så har jag troligen fått ordning på det. Iallafall kommit bra mycket längre

Bos
alla tris är ersatta med
movlw b'001111'
movwf TRISIO
Att jag kör med 6 bitar är för det bara är 6 io pinnar, men det kanske är bättre med 8 som du säger.
Har även fixat alla bsf/bcf till bsf GPIO, 1

> Error - Coff file './12ledcharlieplex.v2.o' could not read string table Det här felet "could not read string table" kommer nu hela tiden oavsett vilket projekt jag öppnar, även mplabs lektioner. Ska googla och prova att uppgradera

Ska städa mer i koden sen idag.
Har hittills skrivit

Kod: Markera allt

  bsf      STATUS,RP0
    movlw    b'001111'    ;3210
    movwf   TRISIO
    bcf      STATUS,RP0
       bsf GPIO,1   ;fram
       bcf GPIO,2
Är det här bättre? har inte hunnit bekanta mig med banksel än

Kod: Markera allt

banksel TRISIO
   movlw    b'001111'    
   movwf   TRISIO
banksel GPIO
      bsf GPIO,1   ;fram
      bcf GPIO,2
här är iallafall den nya koden, om jag får mplab att överhuvudtaget kompilera nåt så ska jag testa den

Kod: Markera allt

#include <p12F683.inc>
     __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _IESO_OFF & _FCMEN_OFF)
     org 0
Start:
	bsf 	STATUS,RP0	;banksel option_reg bättre?
	;banksel	OPTION_REG
	movlw	b'00000111'  ;init timer0 med max prescale
	movwf	OPTION_REG
	bcf		STATUS,RP0
	;banksel	GPIO		
	clrf	GPIO		;init GPIO
	movlw	b'111110'	;0 analog/1-5 digi
	movwf	CMCON0
	banksel	ANSEL
	clrf	ANSEL		;0 till analog fixa senare
	movlw 	b'001001' 	;1245 ut, 3/mclr in, 0 analog in
	movwf	TRISIO	
		
Mainloop:
	call par12	;kör led-par 12
	call par24	;kör led-par 24
	call par45	;osv..
	call par14
	call par25
	call par15	;sista paret, byt håll
	call par25
	call par14
	call par45
	call par24
	goto Mainloop
;tri 0 och 3 alltid höga 001001, kom ihåg, ändra till 8bit
par12
	bsf		STATUS,RP0
	movlw 	b'001111' 	;3210
	movwf	TRISIO
	bcf		STATUS,RP0
		bsf GPIO,1	;fram
		bcf GPIO,2
	call delay1
		bcf GPIO,1	;tillbaka
		bsf GPIO,2
	call delay1
return
par24
	bsf		STATUS,RP0
	movlw 	b'011101' 	;4320
	movwf	TRISIO
	bcf		STATUS,RP0
		bsf GPIO,2
		bcf GPIO,4
	call delay1
		bcf GPIO,2
		bsf GPIO,4
	call delay1	
return
par45
	bsf		STATUS,RP0
	movlw 	b'111001' 	;5430
	movwf	TRISIO
	bcf		STATUS,RP0
		bsf GPIO,4
		bcf GPIO,5
	call delay1
		bcf GPIO,4
		bsf GPIO,5
	call delay1	
return
par14
	bsf		STATUS,RP0
	movlw 	b'001111' 	;3210
	movwf	TRISIO
	bcf		STATUS,RP0
		bsf GPIO,1
		bcf GPIO,4
	call delay1
		bcf GPIO,1
		bsf GPIO,4
	call delay1	
return
par25
	bsf		STATUS,RP0
	movlw 	b'101101' 	;5320
	movwf	TRISIO
	bcf		STATUS,RP0
		bsf GPIO,2
		bcf GPIO,5
	call delay1
		bcf GPIO,2
		bsf GPIO,5
	call delay1
	return
par15
	bsf		STATUS,RP0
	movlw 	b'101011' 	;3210
	movwf	TRISIO
	bcf		STATUS,RP0
		bsf GPIO,1
		bcf GPIO,5
	call delay1
		bcf GPIO,1
		bsf GPIO,5
	call delay1		
	return

delay1
	btfss	INTCON,T0IF
	goto 	$-1
	bcf		INTCON,T0IF
	;om gp3 hög kör delay2
	return

delay2
	btfss	INTCON,T0IF
	goto 	$-1
	bcf		INTCON,T0IF
	return

     end
     

sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjarhjälp P12F683

Inlägg av sodjan »

> ...och ÄNDÅ så har mplab kompilerat den första asm filen jag skrev.

vilket kommando (knapp) använda du för att bygga om projektet ?
"Make" eller "Build All" ?

Ditt BANKSEL exempel ser OK ut (och det är bättre).

Din kod bygger rent här hos mig förrutom några standard varningar som
man kan strunta i samt lite formatteringsslav med koden (4 st "return" på fel ställe).
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Nybörjarhjälp P12F683

Inlägg av Icecap »

Självklart har MPLAB kompilerat den första filen, när man använder "spara som" har det INGEN betydelse för vilka filer som ingår i projektet som det är registrerat i MPLAB!
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Nybörjarhjälp P12F683

Inlägg av bos »

sodjan skrev:bos > Vill du sätta GP1 så skriver du "bsf GPIO, 1".

Notera att även bitarna har symboler så även "BSF GPIO, GP1" fungerar OK...
Det kände jag inte till. Tack för tipset.
Skriv svar