Sida 1 av 2

Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 19:08:29
av dechaine
Jag har nu åter igen tänkt lära mig PIC på allvar... Jag har hittat massor med info och läst så ögonen blöder och jag förstår för en gång skull lite mer än ingenting! :D

Jag har försökt nu i ett par.. tre dagar att få några lysdioder att lysa. Har läst igenom flera tutorials, vilket har hjälpt MIG väldigt mycket, men inte PIC'en. Den säger ingenting...

Jag har provat att... ja, hur man nu skriver på PIC språk... "sätta" alla I/O pinnar förutom GP3 till utgångar samt sätta utgångarna "höga" på flera olika vis, efter olika tutorials mm. Men inget händer...

Det går att skicka över koden till PIC'en utan problem, dock beter sig GP0 och GP1 lite underligt. Jag har satt lysdioder på alla utgångar och när jag skickar över koden så blinkar GP0 och GP1 i takt med lysdioden på Wispen.. Ska det göra det? Visserligen är de kopplade till Wispen via PGC och PGD, men det verkar lite underligt...


På hur många sätt kan man skriva samma sak i assembler? Konstig fråga kanske, men har sett många olika exempelkoder och tutorials och det är inte många som skriver lika dant om man säger så...

Med tanke på att jag provat många olika sätt att skriva på och det inte händer någon ting, så känns det nästan som om PIC'en är död på något sätt...

Har testat lite olika som sagt...

movlw b'001000'
tris 05h
movlw b'110111'
movwf 05h

here
goto here

-------------------------

banksel h'00'
movlw b'001000'
movwf h'05'

banksel h'01'
movlw b'110111'
movwf h'85'

here
goto here

-----------------------------

Har testat fler, men kommer inte ihåg riktigt hur jag skrev..

Vad är det som händer / inte händer??

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 19:29:53
av vfr
Det skulle vara bra att få lite mer uppgifter. :)

T.ex. ett kopplingsschema. Hela koden, inte bara ett par lösryckta bitar.

Vad är konfigbitarna satta till? Har du satt dom i koden eller i programmeringsprogrammet?

Vad använder du för programmerare?

Det är mycket som vi inte vet... Det gör det lite svårt att gissa.

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 19:37:56
av PHermansson
Jo dioderna ska blinka, det kommer databitar från programmeraren som får dem att lysa.
Detta program tror jag ska funka, lite dåligt kommenterat kanske, vet inte riktigt var det kommer ifrån...

Kod: Markera allt

; An LED Blinker
; Around 10 times per second

	list p=12f675
	include "p12f675.inc"

; Configuration word has the following values set:
; * No Data protect
; * No code protect
; * No brown-out reset
; * No MCLR pin function
; * Power-up Timer disabled
; * Watchdog Timer disabled
; * Oscillator is INTOSC with no CLKOUT
 __config B'110010100'


small_delay_tmp	equ	0x20
long_delay_tmp	equ	0x21

	goto main

small_delay:
	movlw 0xff
	movwf small_delay_tmp
small_delay_L1:
	decfsz small_delay_tmp, F
	goto small_delay_L1
	return

; ----------------------------
; W contains count on entry.
; Store it in a temp variable.
; Keep on decrementing and
; calling small_delay
; ----------------------------
	
long_delay:
	movwf long_delay_tmp
long_delay_L1:
	call small_delay
	decfsz long_delay_tmp, F
	goto long_delay_L1
	return

; ----------------------------
; Here comes the main LED blinker
; ----------------------------

main:

	bcf STATUS, RP0
	clrf GPIO
	movlw 0x7
	movwf CMCON ; disable comparator
	bsf STATUS, RP0
	movlw 0x0
	movwf TRISIO ; All pins outputs
	bcf STATUS, RP0

infinite:
	bcf GPIO, GP4
	movlw 0x82
	call long_delay
	bsf GPIO, GP4
	movlw 0x82
	call long_delay
	goto infinite
	
	end

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 19:41:46
av v-g
Du vet att MOVLW flyttar en literal (=en byte) till arbetsminnet?

MOVWF flyttar FRÅN arbetsminnet till ett register (=F:et i movwF)?

Arbetsminnet heter WREG.

Kolla på koden ovan så ser du att den inte gör något.

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 20:17:19
av dechaine
Problemet är bara att jag inte kommer åt att kopiera koden och klistra in den här.. Datorn jag programerar på har inga drivrutiner till moderkortet så jag kommer varken åt genom nätverk eller usb portarna.. och jag orkar inte skriva av hela koden..

Men om man säger som såhär, att jag använder MPLAB och har utgått från Mallen som finns för 12F675. Det enda jag skrivit är de exempel jag skrev i mitt förra inlägg.. Allt går fint att kompilera till en .hex fil som sedan går fint att skicka över till PIC'en... via en Wisp648.

kopplat så här:

Kod: Markera allt

                ------uu------
       +5 V ----| vdd    vss |---- Gnd
      led   <---| gp5    gp0 |--- led --- PGD
      led   <---| gp4    gp1 |--- led --- PGC
     MCLR  -----| gp3    gp2 |--- led
                --------------         

Om jag har förstått det hela rätt så för att konfigurera picen enligt mitt önskemål (alla> utgångar> höga) så skall man först "gå" till BANK0 där man på adressen i mitt fall blir GPIO talar om om det skall vara ut resp. in-gångar (GP0-GP5) genom att skriva "värdet" till W och sedan från W till GPIO.

Sedan för att sätta utgångarna höga så går man till BANK1 och där på samma sätt använder W för att sätta in värdet i TRISIO...

Är det något jag missupfattat, eller får jag det bara inte rätt i assembler?

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 20:32:11
av E85
Har du testat exemplet i databladet?

Kod: Markera allt

bcf STATUS,RP0  ;Bank 0
clrf GPIO       ;Init GPIO
movlw 07h       ;Set GP<2:0> to
movwf CMCON     ;digital IO
bsf STATUS,RP0  ;Bank 1
clrf ANSEL      ;Digital I/O
movlw 0Ch       ;Set GP<3:2> as inputs
movwf TRISIO    ;and set GP<5:4,1:0> as outputs
Misstänker att det är ANSEL som ställer till det för dig.
Edit: Tydligen inte, se nedan.

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 20:47:19
av bos
ANSEL har bara relevans om det är digitala ingångar, så det kvittar i det här fallet.

Författaren har dock bara sex bitar i sina movlw-instruktioner. Det är inte så bra. Padda MSB med två nollor. Dvs skriv om movlw b'001000' till movlw b'00001000'. Sen rekommenderar jag inte att använda mnemonicen "tris". T.om Microchip avråder det. Använd registret TRISIO istället.

Under förutsättning att MCU:n initieras korrekt (författaren får snällt skriva av hela sin kod för att vi ska kunna verifiera, iallafall jag orkar inte gissa hur initieringen gjorts) så sätter följande kod alla utgångar höga och tänder därmed LED:arna (under förutsättning att de kopplats rätt, inte ens det vet vi, men det ska vara PIC -> motstånd -> LED-anod, LED-katod -> GND):

Kod: Markera allt

banksel TRISIO
movlw b'00001000'
movwf TRISIO

banksel GPIO
movlw b'11111111'
movwf GPIO

foo: goto foo

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 21:11:22
av dechaine
Ok.. nu har jag provat de två sistnämnda koderna.. allt skickas över, men inget händer...

LED'sen är korrekt kopplade med tillhörande motstånd. Inget lyser ändå...


Kan ju börja med att se om configen är rätt...
Configen ser ut så här:

_CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON_ & INTRC_OSC_NOCLKOUT

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 21:16:03
av bearing
_MCLRE_ON betyder att pinnen /MCLR inte kan användas som I/O utan måste kopplas med motstånd till +5V för att kretsen ska köra koden.

EDIT: tog bort resten som var fel.

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 21:20:57
av E85
Jag har programmerat kretsar med MCLR påslagen med WISP628:an. Den drar väl upp den till 13V eller nåt sånt om jag fattat rätt så det funkar vilket som.

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 21:24:07
av bearing
Jag minns nu att det bara gäller vissa kretsar. En del kretsar kräver att VPP läggs på innan VDD, och det om _MCLR_OFF, inte _MCLR_ON som jag först skrev.

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 21:30:22
av dechaine
Om jag förstått det rätt så klarar Wisp648 det... Vpp-before-Vdd sequence...

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 21:33:39
av vfr
Datorn jag programerar på har inga drivrutiner till moderkortet så jag kommer varken åt genom nätverk eller usb portarna.. och jag orkar inte skriva av hela koden..

Men jösses. Använd en gammal hederlig floppy då. Jag vet att floppy suger gammal kängrupung, men om alternativet är att handknacka allting så är en floppy jättebra. Och har du ingen floppy så är det ju tufft. Det här är ett lysande tillfälle att faktiskt ha nytta av en sådan.

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 21:36:36
av bearing
Ifall du är säker på det skulle du ju kunna välja _MCLR_OFF. Eller, ta bort LEDen på MCLR och koppla motstånd till +5V. Då körs koden iaf. Din kod är svårläst så jag har inte orkat läsa den.

Re: Problem med att få livstecken ur en PIC12F675

Postat: 24 augusti 2009, 21:42:00
av vfr
Ett tips är att använda "CODE"-taggarna så att man iallafall får riktiga kolumner. Då blir det lite mer lättläst.