PIC16F84A och PCLATH

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
ROLA
Inlägg: 41
Blev medlem: 6 augusti 2004, 10:05:53

PIC16F84A och PCLATH

Inlägg av ROLA »

Jag har skivit en del på ett program nu, och det beter sig konstigt beroende på var jag lägger subrutinerna någon stans..

Jag misstänkter att det har med att adressering via en call endast kan hoppa 255 bytes?

Kan registret PCLATH lösa mitt problem.

Jag hittade dessa macron, men dom är gjorda för 16f877.

Kod: Markera allt

xgoto	MACRO	label
	if label & 0x800
		bsf     PCLATH, 3
 	else
		bcf     PCLATH, 3
 	endif
		goto    label
ENDM

xcall	MACRO	label
	LOCAL   testlabel
testlabel
	if label & 0x800
		bsf     PCLATH, 3
	else
		bcf     PCLATH, 3
	endif
	call    label
	if testlabel & 0x800
		bsf     PCLATH, 3
	else
		bcf     PCLATH, 3
	endif
ENDM
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

jag har inte databladet till F84'an nerladdat, men så vitt jag minns har F84'an bara 1K word minne, och eftersom CALL kan direkt anropa adresser inom 2K words, så bör det inte vara något problem.

Men varför koncentrerar du dig inte på det faktiska problemet istället ?
Visa vad som går fel, så får vi se.

Och var har du sett att CALL bara kan "hoppa 255 bytes" ?

PS:
Om man tittat på dina macron, så står det "0x800", vilket ju är just
2K word gränsen. Eftersom F84'an bara har 1K word, så kommer "label" aldrig att vara i närheten av "0x800"...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Har kollat databladet.
PCLATH ska inte vara problemet eftersom F84'an bara har 1K word minne.

En annan sak...

Är det någon speciell anledning till att du
använder du den gamla, omoderna och dyra F84'an ?
Du kanske gillar "veteran-processorer"... :-)
ROLA
Inlägg: 41
Blev medlem: 6 augusti 2004, 10:05:53

Inlägg av ROLA »

Jag fick lite skumma fel när jag hade en lookup-tabell med 16 värden längst ner i programmet. Jag flyttade den till början, då försvann problemet.
Läste någon om page-problem med tabeller, så jag fick mina tankar på PCLATH.

Har MP3.5 med adapterkort från Adteknik som programerare.

Jag började med 16F84A för att den verkade enkel.
Jag har fortfarande inte vuxit ur den.
Passar direkt i AD-tekniks adapterkort (18pin DIL).

Av dom som finns på ELFA kan jag endast programmera följande med min programerare:
16F628 DIL18
16F676 DIL14
16F84A DIL18
16F870 DIL28
16F873A SO28 (Ytmonterat är bara att glömma :? )
16F874A DIL40
16F876A DIL28
16F877A DIL40

Dom som inte är DIL18 måste jag bygga en ICSP-adapter, vilket jag drar mig för.

Som jag ser det skulle faktiskt 16F628 vara ett alternativ som är billigare, har dubbelt med minne samt USART. Dubbelt så mycket EEPROM, fast jag använder bara 5 bytes så..

Som det är nu driver jag bl.a en 3 x 7segments LCD via en 74HC595, vilket funkar bra.

74HC595 11.30SEK
PIC16F628 38.20SEK
Summa: 49.50SEK

Jmf. med en PICF870 47.20SEK

Ja, det blir billigare 8)
Jag använder TMR0 på int, för att refresha displayen.
Bitbangar seriekom.

Är det alltid samma pinnar som gäller för ICSP på alla DIL 40, resp. DIL 28?
Senast redigerad av ROLA 26 juli 2005, 18:43:55, redigerad totalt 2 gånger.
ROLA
Inlägg: 41
Blev medlem: 6 augusti 2004, 10:05:53

Inlägg av ROLA »

sodjan skrev: Och var har du sett att CALL bara kan "hoppa 255 bytes" ?

PS:
Om man tittat på dina macron, så står det "0x800", vilket ju är just
2K word gränsen. Eftersom F84'an bara har 1K word, så kommer "label" aldrig att vara i närheten av "0x800"...
Läste i databladet och stirrade mig blind på att PC bara är 8 bitar..

Jag hittade macrona, men dom är skrivna för F877.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, en lookup tabell med RETLW, eller hur ?
Men problemet har inte med CALL att göra, utan det är
"ADDWF PCL, f" som bara klarar 255 adresser framåt.

Det finns en app note hos Microchip som visar har man fixar det, om man vill...

Jag kommer inte in på ADtekniks site, så jag ser inte deras programmerare, men generellt så skulle jag rekomendera dig att titta närmare på ICSP, det är så mycket smidigare. Hur gör du idag ? Flyttar PIC'en fram och tillbaka mellan programmerare och din applikation ?

När det gäller ELFA's PIC sortiment, så är det inget annat än ett stort skämt !!
Det saknas flera PIC typer som passar bra som nybörjar modeller, t.ex 16F88.
Av de du har listat, så är 16F628 ett mycket bättre alternativ, av de orsaker som du själv nämner.

Av de som ELFA *saknar* som har 18-pinnar, är bl.a
16F88, 16F648A, 16F688, 16F818/819 också trevliga alternativ.

> "Bitbangar seriekom."

Ha ! Och ändå så säger du samtidigt att :

> "Jag har fortfarande inte vuxit ur den."

Du motsäger dig själv... :-) :-)

*Ingen* bitbangar seriekom idag om det inte är av *mycket* speciella orsaker. I princip har alla PIC'ar (utom vissa speciella, som 6/8-pinnarna) idag som är av "generell" karaktär, hårdvara (USART/EUSART) för seriekom.

Slutligen, om man vill ha en PIC som fungerar till "allt", så kanske man ska kolla på någon av de mindre (28-pinnarna) i PIC18 serien. Enklare att programmera en PIC16 (speciellt F84!) och mycket kraftfullare.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Hej igen, du la till lite efter att jag postade... :-)

För en PIC-hobbyist (?) är kostnaden för själva processorn inte så intressant. Det är mycket mer värt att slippa strul p.g.a att man har varit för snål och valt en PIC utan tillräckligt med resurser så att programmeringen blir onödigt komplicerad. Det är därför jag tycker att man allvarligt skall fundera på PIC18 serien.

Om man skall bygga 1 miljon produkter med en PIC i varje, är det lite annorlunda... :-)

> "Är det alltid samma pinnar som gäller för ICSP på alla DIL 40, resp. DIL 28? "

I stort sätt. Det finns undantag, jag tror att PIC30 serien har sina pinnar lite annorlunda...
ROLA
Inlägg: 41
Blev medlem: 6 augusti 2004, 10:05:53

Inlägg av ROLA »

sodjan skrev:Jag kommer inte in på ADtekniks site, så jag ser inte deras programmerare, men generellt så skulle jag rekomendera dig att titta närmare på ICSP, det är så mycket smidigare.
http://www.adteknik.se
sodjan skrev:Hur gör du idag ? Flyttar PIC'en fram och tillbaka mellan programmerare och din applikation ?
Ehm, ja.. :roll:
sodjan skrev: > "Bitbangar seriekom."

Ha ! Och ändå så säger du samtidigt att :

> "Jag har fortfarande inte vuxit ur den."

Du motsäger dig själv... :-) :-)
Jag har väl inte insett det ännu, helt enkelt *ler*
sodjan skrev: *Ingen* bitbangar seriekom idag om det inte är av *mycket* speciella orsaker. I princip har alla PIC'ar (utom vissa speciella, som 6/8-pinnarna) idag som är av "generell" karaktär, hårdvara (USART/EUSART) för seriekom.
Jag gör ett OBD2-verktyg till bilen, vilket innebär 5baud + 10400baud.
Ingen PIC med USART jag har stött på klarar 5 baud, så det blir till att "bitbanga" det.
10400 borde inte vara någro problem iofs...

Mvh/Roger.
Skriv svar