Sida 1 av 1

Vad har jag missat ? Assembler

Postat: 24 januari 2006, 00:12:32
av DragonOrb
Hej
Har suttit ett tag nu och har inte kommit vidare.
Picen är en PIC18F458 och den fungerar perfekt med Voti´s "Blink a led" exempel.

Kod: Markera allt

	#include <P18F458.inc> 
	;-----------------
	;Reset 
	org 0000h
	goto main
	;----------------
	org 0008h
main:
	;Stänger av A/D omvandlaren på porta
	;Sätter alla portar i porta som utgångar
	CLRF	PORTA
	CLRF	LATA
	MOVLW	07h
	MOVWF	ADCON1
	MOVLW	0x00
	MOVWF	TRISA
	;----------------------------------------------
	;Börjar Programet
loop:
	movlw	0x00	;Sätter PortA till logiskt låg
	movwf	PORTA
	goto loop
	end
Så ser koden ut.
Problemet är att inga portar i PORTA blir låga.
Jag har 4.5 volt på utgångarna.
Vad kan jag ha missat ?

Postat: 24 januari 2006, 06:35:00
av klasg
Hej.
Nu har jag inte kikat på just den picen men har du kikat på, cmcon0 och ansel?

EDIT: Vad gör org 0008h där? Och du är i rätt bank?
/Klas

Postat: 24 januari 2006, 09:18:12
av DragonOrb
Det är interrupt sektorn.

Blir ingen skillnad när jag tar org 0000h heller.

Postat: 24 januari 2006, 09:29:02
av Icecap
MOVLW 07h ???
Ska det inte vara
MOVLW 0x07
???

Postat: 24 januari 2006, 09:36:27
av klasg
Spelar nog ingen roll Icecap.

DragonOrb:
Lättare om du alltid skriver på ett vis och inte blandar XXh, 0xXX (h'XX').

Postat: 24 januari 2006, 10:40:45
av sodjan
Läs på i databladet om TRISA...

EDIT : Shit ! Jag missade TRISA i din kod. Ber om ursäkt !!

Postat: 24 januari 2006, 16:37:47
av DragonOrb
Hittar inget hjälpande i databladet :(

När jag kollar på simuleringen i MPLAB så är
TRISA 00000000
dvs utgångar. Och portA är även låga.

Postat: 24 januari 2006, 17:34:11
av sodjan
Några andra saker...

> CLRF PORTA
> CLRF LATA

Båda behövs inte, de gör samma sak (när porten är utgång).

> movlw 0x00 ;Sätter PortA till logiskt låg
> movwf PORTA

Du har ju redan gjort CLRF PORTA tidigare, så detta är helt onödigt.

> MOVLW 0x00
> MOVWF TRISA

CLRF TRISA går lika bra (du har ju gjort så ovan).

Vad är kopplat till PORTA ?

Kan du kolla om processorn går alls ?

Var har du alla CONFIG inställningar ?

Oscillator ?

Avkoppling av spänningsmatning ?

Övrigt ?

Postat: 24 januari 2006, 18:15:05
av DragonOrb
Nu ser koden ut såhär, fast det funkar ändå inte :S

Kod: Markera allt

	#include <P18F458.inc> 
	;-----------------
	;Reset 
	org 0x00
	goto main
	;----------------
	org 0008h
main:
	;Stänger av A/D omvandlaren på porta
	;Sätter alla portar i porta som utgångar
	CLRF	PORTA
	MOVLW	0x07
	MOVWF	ADCON1
	CLRF	PORTA
	goto main
	end

Vad är kopplat till PORTA ?
Sitter lysdioder på RA0 till RA4
Katoden mot PIC, anoden till ett 330ohm´s motstånd som går till 5 volt.

Kan du kolla om processorn går alls ?
Jupp , den har stått o blinkat med voti´s "Blink A led" exempel i ca 1 timme nu.

Var har du alla CONFIG inställningar ?
I MPLAB gick jag till configuration bits. Där ställde jag in XT på kristall , Watchdog timer off , Power Up Timer off.

Oscillator ?
20mhz kristall med 22pF kodningar mot jord.

Avkoppling av spänningsmatning ?
22uF mellan 5+volt och jord
0.1uF mellan 5+volt och jord

Övrigt ?
33k motstånd mellan MCRL och +5volt
Programeraren (wisp628) kopplad egenligt din sida.
Funkar perfekt att programera cpun.[/code]

Postat: 24 januari 2006, 18:57:16
av sodjan
Nej, jag sa inte att det skulle fungera med ändringarna i koden,
koden var helt OK som den var, men inte så "snygg"...

> Jupp , den har stått o blinkat med voti´s "Blink A led" exempel i ca 1 timme nu.

Vilken hex fil ?

> I MPLAB gick jag till configuration bits. Där ställde jag in XT på kristall , Watchdog timer off , Power Up Timer off.

Gör inte det. Lägg det i koden, så slipper du frågor om det i framtiden.
Se slutet av INC filen för syntax och parametrar.

> 20mhz

20 Mhz = HS.

> Watchdog timer off ,...

OK.

> Power Up Timer off....

Kan lika gärna vara on, blir lite stabilare start om spänningen svajar
lite i början.

Fixa configen (speciellt XT/HS), så får vi se...

Postat: 24 januari 2006, 19:24:13
av DragonOrb
Jippi nu funkar det :D

Nu ska det kodas :D

Såhär ser configen ut nu.

Kod: Markera allt

	list	p=18F458
	#include <P18F458.inc> 
	CONFIG	OSCS	=	OFF	
	CONFIG	OSC	=	HS	
	CONFIG	WDT	=	OFF
	CONFIG	PWRT	=	ON
Tack för hjälpen :D

Postat: 24 januari 2006, 19:57:35
av sodjan
OK, det var säkert XT -> HS som fixade det.

Tänk vad tid för alla som hade sparats om du hade
fixat ett ordentligt första inlägg utan att utelämna en massa
kritiska uppgifter, i det här fallet kristall och config...

En sista kommentar, jag brukar alltid ange *ALLA* config
inställningar, det är inte alltid säkert att det default som
anges i databladet stämmer, och dessutom tvingar du
den som ska läsa koden att slå upp dom i databladet för
att se hur det är satt, eller att du slipper att få frågor om det...