sjukt problem med 12F675

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Inlägg av newbadboy »

har fått rätt på det nu :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Att det ska vara så svårt...

Det hör till god netiquet att alltid tala om vad det var för problem.
Annars visar man att man skiter i de som har lagt ner tid för att hjälpa till...
Användarvisningsbild
luffare
EF Sponsor
Inlägg: 132
Blev medlem: 4 oktober 2005, 16:25:21
Ort: Uppsala
Kontakt:

Inlägg av luffare »

Har tyvär haft fullt upp och inte hunnit med den här tråden\problemet men nu har jag äntligen lite tid över :D
sodjan skrev: Att det ska vara så svårt...

Det hör till god netiquet att alltid tala om vad det var för problem.
Annars visar man att man skiter i de som har lagt ner tid för att hjälpa till...
Menar du mej? försöker skriva så mycket info det går, e glad för all hjälp det är mycket bättre här än i skolan...
sodjan skrev:Du har "_MCLRE_ON" och alltså är pinnen "GP3/MCLR/Vpp" = **MCLR** och inget annat...

> GP3 är alltid in men varför är den aktiv?

Vad betyder "aktiv" ?

Sen bör du läsa databladet, *speciellt* de små grå rutorna på sidan
med beskrivningen av GPIO. Det finns en anledning att man lägger
*extra viktig* info i egna små rutor... Se även exempel 3-1.
Har den på för att slippa andvända tilläggskretsen till wispen. Behöver den bara till att programera.
Med aktiv menade jag att den är en etta i simulatorn...
Har läst igenom dom men fattar inte riktigt hur det hela går ihop, jag har till och med kopierat hela texten rakt av, här kommer hela programmet:

Kod: Markera allt

;Test Program för Pic12F675
;****************************************************************
	List	p=12f675
	include <p12f675.inc>
	__CONFIG _CP_OFF & _WDT_OFF & _xt_OSc & _MCLRE_ON
	org	0x00
;****************************************************************
;Init av port exempel ur databladet
	bcf		status,rp0	;Bank,0
	clrf	gpio		;init GPIO
	movlw	07h			;Set GP<2:0> to
	movwf	cmcon		;digital IO
	bsf		status,rp0	;Bank1
	clrf	ansel		;Digital I/O
	movlw	0ch			;Set GP <3:2> as inputs
	movwf	trisio		;And set GP <5:4,1:0> as outputs
;Slut på exempel

	bsf		gpio,5
	goto	$

end
(funkar inte i simulator eller verkligheten...)
newbadboy skrev:Jag kan i princip inget om asm. men du måste stänga av a/d och och komparatorn. sen måste du sätta sätta pinnarna som in/utgångar och sen måste du även sätta de till "digitala pinnar"
Jag antar att jag fått till det med att sätta dom till IO och digitala men inte stängt av dom? hur gör man det?

Kan nån förklara lite mer vad som händer och vad ansel och cmcon är och gör? Har läst en del trådar & datablad men hajjar inte riktigt förutom att ansel bestämmer om porten är digital eller analog, Jag tror att adcon0-1 hör ihop med "stänga av a/d" men vet inte riktigt hur jag ska göra...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> (funkar inte i simulator eller verkligheten...)

Vad exakt menar du med "funkar inte" ??
Vad händer ? Eller vad händer inte ?

> Jag tror att adcon0-1 hör ihop med "stänga av a/d" men vet inte riktigt hur jag ska göra...

Kolla beskrivningen av ADCON, den finns tillsammans med beskrivningen av ADC'n.
Där framgår vilken inställning som innebär att den är "off".

Dock tror jag att det räcker med att sätta pinnarna till digitala I/O (m.h.a ANSEL),
och att ADC'n är "off" per default.

> movlw 07h ;Set GP<2:0>......

Två saker...
Använd binära konstanter till register som har bitar med olika betydelse.
Använd gärna skrivsättet h'07', b'01010101' o.s.v så blir det tydligare.
(0ch ser för jäkligt ut... :-) )

Sen, använd BANKSEL istället för att fippla med RP0 direkt. Säkrare
och mindre risk för fel.

Med _XT_OSC kan du inte använda alla I/O pinnarna. Minns inte på rak arm
vilka, men kolla databladet.

Med _MCLRE_ON är det en I/O pinne son inte kan användas, notera dock
bara konsekvenserna av att köra med _MCLRE_OFF !!!!
Se : http://www.jescab.se/InternMCLR.html
Användarvisningsbild
luffare
EF Sponsor
Inlägg: 132
Blev medlem: 4 oktober 2005, 16:25:21
Ort: Uppsala
Kontakt:

Inlägg av luffare »

Nu har jag fått igång det men vet inte riktigt hur :roll:

Med att det inte funkar menade jag:
GPIO i Watch inte ändras visar inga 1:or alls.
Inga ben blir 5v.

Hittade Adcon0, har även gått igenom alla dom andra delarna och skrotat exemplet helt, resultatet blev iprincip samma sak fast det fungerar i simulatorn dvs gpio visar 1:or när den ska. (och lediga utben=5V)
Jag har provat sätta ; framför dom olika kodraderna för att se vad som var fel. Det enda som visar samma "bugg" som förut är när jag tar bort ANSEL raden. Dock funkar det fint om jag byter ut "movwf ansel" till bara "clrf ansel" Alltså likadant som förut? Det ända skillnaden jag ser är att jag ändrar i bankerna i omvänd ordning mot förut...

Kod: Markera allt

;Test Program för Pic12F675
;****************************************************************
	List	p=12f675
	include <p12f675.inc>
	__CONFIG _CP_OFF & _WDT_OFF & _xt_OSc
	org	0x00
;****************************************************************

	banksel	trisio		;Öppnar Bank 1
	movlw	b'00000000'
	movwf	ansel		;Alla portar är digitala(ans0-3=bit0-3)
	movlw	b'00000000'	
	movwf	trisio		;Alla portar är utgångar utom gp3..

	banksel	gpio		;Öppnar Bank 0
	clrf	gpio		;init GPIO
	bcf		adcon0,adon	;A/D omvandlare avstängd.
	movlw	b'00000111'
	movwf	cmcon		;Comparator OFF

start
	movlw	b'00010111'	;Alla utgångar på.
	movwf	gpio
	goto	$
end

>Två saker...
Vet fick lära mej det i en tidigare tråd :)
Skrev bara av databladet.

>Med _XT_OSC kan du inte använda alla I/O pinnarna.
OPS :oops: Blandade ihop GP5 med ben5 som är GP2.
XT är GP4&5.
(Testade med dom riktiga lediga utgångarna, samma fel)

>Se : http://www.jescab.se/InternMCLR.html
Läste den förut, väldigt bra info. Nu slipper jag svära så mycket.

Nu när det här funkar så har jag fått lite andra roliga fel :shock:
Jag andvänder bumblebee och xwisp2w.

Efter ett tag kunde jag inte programera pic:arna med bumblebee den klagade vid verifiering på "fuse bits" . Tar jag bort config raden så funkade det att skriva utan klagomål, men programmet funkade inte...
När jag körde samma hex fil(med config) i xwisp2w så fungerar det fint.
Vad är skillnaden och vad kan inte bumblebee skriva över?
Läste nånstans att man skulle spara dom sista fyra tecknen i en ny pic innan man programerade(JDM programerare) och lägga in dom i sin egen kod. Är det samma grej här?

Tack för hjälp o guidening :D

Edit: Kan man formatera eller fabriksåterställa en pic?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Använd XWisp2 så slipper du fråga om andra verktyg...

> Kan man formatera eller fabriksåterställa en pic?

"Erase all".
D.v.s det som normalt görs först vid en om-programmering.
Vissa PICs med den äldre varianten av INTOSC (ibland kallad INTRC)
har dock ett kallibreringsvärde som försvinner vid en "erase all". Alla
normalt funtade programmerare tar hand om att läsa ut det och
programmera tillbaka det igen. Men kör man en separat erase, så kan
man tappa bort det.

Nyare modeller med den nya 1%-iga INTOSC har ett fabriksprogrammerat
fast kallibreringsvärde som inte går att radera (på något sätt).

Jämför t.ex 12F675 med den nyare 12F683...

> Dock funkar det fint om jag byter ut "movwf ansel" till bara "clrf ansel"

movlw b'00000000'
movwf ansel

är samma sak som

clrf ansel

så där ska det inte vara någon skillnad.
Användarvisningsbild
luffare
EF Sponsor
Inlägg: 132
Blev medlem: 4 oktober 2005, 16:25:21
Ort: Uppsala
Kontakt:

Inlägg av luffare »

ok men vad andvänds kalibreringsvärdet till?

>är samma sak som
>clrf ansel
>så där ska det inte vara någon skillnad.

jo ja vet men tänkte om det var nån bugg elr nåt...

Har fått ett nytt väldigt konstigt fel. Har gjort en evighets loop (blink,led)
efter Ungefär fyra rundor i loopen så värkar det som att pic:en resettar sej.
Ser man till att det hela tiden är 1 på ingången som startar blinkandet(GP1) så ser man att ungefär var 4:e blink så blinkar den lite saktare en gång, trycker man bara snabbt och släpper så blinkar den ca 4grr sen stoppar den.
Jag har provat med 2 olika pickar(12f675) 3 olika kristaller(2st4mhz 1st 20mhz) och intärn klocka. det blir samma fel på alla förutom 20mhz som buggar ut helt...(tänds bara om jag pilar på den).
Jag har även provat med 33kohm och 1kohm och inget motstånd till mclr.
har testat pull up & down kopplingar på ingången och med en riktigt digital nolla o etta från ett labbbord.
Har även testat med och utan extra kretsen(diod,konding & elektrolytkonding) i blink a led schemat från wisp sidan,vad exakt gör den?
Jag har 5v in från labb bordet/mojängen..

Här kommer koden: (har även testat olika portar)

Kod: Markera allt

;****************************************************************
	List	p=12f675
;****************************************************************	
	include <p12f675.inc>
	__CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF &_PWRTE_OFF & _WDT_ON & _xt_osc ; _INTRC_OSC_NOCLKOUT
	tid1	equ	0x21
	tid2	equ	0x22
;****************************************************************
	org	0x00			;Startar programmet på adress Hex 00
;****************************************************************
init
	banksel	trisio		;Öppnar Bank 1
	movlw	b'00000000'
	movwf	ansel		;Alla portar är digitala(ans0-3=bit0-3)
	movlw	b'00000010'	
	movwf	trisio		;Alla portar är utgångar utom gp1 (& gp3..)

	banksel	gpio		;Öppnar Bank 0
	clrf	gpio		;init GPIO
	bcf		adcon0,adon	;A/D omvandlare avstängd.
	movlw	b'00000111'
	movwf	cmcon		;Comparator OFF
;****************************************************************
	clrw
	movwf	tid1
	movwf	tid2
start
	btfss	gpio,1
	goto	start

blink
	bsf		gpio,2		;tänd Led
	call	timer
	bcf		gpio,2		;släck Led
	call	timer
	goto	blink

timer
	movlw	b'11111111'
	movwf	tid1
loop2	
	movlw	b'11111111'
	movwf	tid2
loop1	
	decfsz	tid2
	goto	loop1

	decfsz	tid1
	goto	loop2
return
end
EDIT:
>Nyare modeller med den nya 1%-iga INTOSC har ett fabriksprogrammerat
>fast kallibreringsvärde som inte går att radera (på något sätt).
>Jämför t.ex 12F675 med den nyare 12F683...

Har du några sånna inne? och gärna nån motsvarighet till 16f84 (lite större än 12f683)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Har fått ett nytt väldigt konstigt fel....

_WDT_ON

> Har du några sånna inne? och gärna nån motsvarighet till 16f84 (lite större än 12f683)

Ja, se : http://www.jescab.se/Prod_PIC.html
Användarvisningsbild
luffare
EF Sponsor
Inlägg: 132
Blev medlem: 4 oktober 2005, 16:25:21
Ort: Uppsala
Kontakt:

Inlägg av luffare »

DOH! :roll:
Nu funkar det fin fint :)

Har PIC16F628/648A fast kalibreringsvärde eller ere bara PIC16F88?
behöver inga just nu men bra o veta.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

I princip alla nanowatt device (med 1% intosc).
Användarvisningsbild
Zyxel615
EF Sponsor
Inlägg: 1839
Blev medlem: 9 november 2005, 21:20:43
Ort: Kiruna

Inlägg av Zyxel615 »

sodjan skrev:Nyare modeller med den nya 1%-iga INTOSC har ett fabriksprogrammerat
fast kallibreringsvärde som inte går att radera (på något sätt).
Jasså inte??? :madmodder: :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Visst, "Dremelmassakern", också känd som "motorsågsmassakern light"... :-)
Skriv svar