Vägrar fungera med PIC16F676

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sheazar
Inlägg: 40
Blev medlem: 12 maj 2008, 12:56:54
Ort: Göteborg

Vägrar fungera med PIC16F676

Inlägg av sheazar »

Jag har tidigare pysslat lite med den PIC16F690 som jag fick med mitt PICKit 2 när jag köpte det, men nu så tänkte jag använda en 16F676 i ett projekt och jag stötte på problem i stort sett så fort jag började :(.

Jag hade ett program som jag skulle använda men som var skrivet för 690:an (i C), jag tänkte dock se om det fungerade innan jag började modifiera. Till min förtjusning så fungerade det i stort som tänkt, dock bara en gång. Nästa gång jag försökte programmera en något hände ingenting. PIC:en programmerades till synes och det kom inga felmeddelande men sedan ingenting mer. Tänkte att dom kanske skilljer sig åt för mycket och skrev för att testa enklaste programmet jag kom på. Det gav ett fungerande program i asm efter en stund men inte i C. Tycker dom gör samma sak, fattar ingenting :? .

ASM

Kod: Markera allt

	list		p=16f676
	#include	<P16F676.inc>

	ORG		0x000

	banksel TRISC
	clrf	TRISC
	clrf	ANSEL

	banksel	PORTC
	movlw	5
	movwf	PORTC

loop
	goto loop
end
C (Kompilerad med HI-TECH PICC V9.65PL1 (Lite))

Kod: Markera allt

#include <pic.h>

int main(void) {
	TRISC = 0;
	ANSEL = 0;

	PORTC = 5;

	while(1) {
	}
}
Någon som har några bra ideer? Står dessvärre helt still för mig för tillfället (Försökte använda absolut adressering till PORTC men då krashade kompliatorn.) (Watchdog timern är avstängd)

EDIT: Om man nollar ANSEL så fungerar det i simulatorn men fortfarande inte i den fysiska kretsen
Senast redigerad av sheazar 30 juni 2009, 13:22:48, redigerad totalt 3 gånger.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Vägrar fungera med PIC16F676

Inlägg av sodjan »

Av din korta kod så utläser jag att du har slarvat en hel del
med läsningen av databladet. Det brukar inte hjälpa direkt.
Har du alls kollat på PORTC i databladet för 16F676 ?
sheazar
Inlägg: 40
Blev medlem: 12 maj 2008, 12:56:54
Ort: Göteborg

Re: Vägrar fungera med PIC16F676

Inlägg av sheazar »

Jadå, och det enda som jag kan se därifrån är att jag i min kod inte nollar ANSEL, har dock testat detta med och det hjälper i simulatorn men inte på den riktiga kretsen. Lägger till det så ingen mer behöver störa sig på det.
Användarvisningsbild
Icecap
Inlägg: 26703
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Vägrar fungera med PIC16F676

Inlägg av Icecap »

Och när du sedan läser ORDENTLIGT rörande ANSEL då kanske du förstår.
bos
Inlägg: 2318
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Vägrar fungera med PIC16F676

Inlägg av bos »

Dubbelkolla att du valt rätt PIC i MPLAB, så att du inte fortfarande kompilerar för 16F690. 690:an har nämligen komparatorer multiplexade på PORTC (676 har det på PORTA), och eftersom du inte stänger av komparatormodulen så misstänker jag att det är detta (kompilering till fel MCU) som är fel. Du stänger av komparatorerna med CMCON = 7 (databladet sid 39).

Vidare så reagerar jag på en bagatell i din kod. Det finns nämligen en chans att kompilatorn får fel MCU-definitioner när du inkluderar pic.h. Prova att byta #include <pic.h> mot #include <htc.h> istället. Den senare är "övergripande" och bör användas istället eftersom den är uppbyggd med en myriad #if-satser och på så vis själv kan plocka fram vilken PIC som körs. Detta under förutsättning att du valt rätt PIC i MPLAB, så kontrollera det jag skrev i första stycket först.
sheazar
Inlägg: 40
Blev medlem: 12 maj 2008, 12:56:54
Ort: Göteborg

Re: Vägrar fungera med PIC16F676

Inlägg av sheazar »

TACK bos för ett vettigt inlägg, tittade igår på komperatorn men ignorerade den eftersom den som sagt finns på PORTA. Testade dock förslaget nu och dubbelkollade även vald MCU, dessvärre hjälpte inget av alternativen :( (Skapade även ett nytt projekt för att vara 100% säker men det hjälpte inte heller.)

Och när du sedan läser ORDENTLIGT rörande ANSEL då kanske du förstår.
Jag vet mycket väl vad ANSEL gör men jag tog inte med det pga att det fungerade utan i asm och jag ville ha så absolut kort kod som möjligt för att minimera risk för felskrivningar. Tycker det är synd att man väldigt ofta får den här typen av kommentarer då det enda dom gör är att man blir irriterad.
Användarvisningsbild
Icecap
Inlägg: 26703
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Vägrar fungera med PIC16F676

Inlägg av Icecap »

Du kan knappast ha förstått vad ANSEL gör när du ger det register värdet 0x00!!!

Och att ha så lite kod som möjligt är just vad som ger dessa konstiga fel! Man får aldrig förlita sig på att register står till ett visst värde vid reset, man ska alltid sätta rätt läge på dom, utan undantag!

Och om du anser att det bara är en irritation att detta påpekas: varför frågar du då här?

EDIT: Hmf... hade skrivit ADSEL när jag menade ANSEL.
Senast redigerad av Icecap 30 juni 2009, 12:51:25, redigerad totalt 1 gång.
bos
Inlägg: 2318
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Vägrar fungera med PIC16F676

Inlägg av bos »

> Du kan knappast ha förstått vad ADSEL gör när du ger det register värdet 0x00!!!

Nu var det iofs ANSEL det handlade om (något ADSEL har jag aldrig hört så jag antar det bara är en typo), men att påstå att någon inte förstått hur ANSEL funkar bara för att man nollställt det registret är väl lite att ta i. Visst skulle du själv ha nollställt det? Vad är isåfall problemet?
sheazar
Inlägg: 40
Blev medlem: 12 maj 2008, 12:56:54
Ort: Göteborg

Re: Vägrar fungera med PIC16F676

Inlägg av sheazar »

Jag kan hålla med om att jag för säkerhets skull borde satt ANSEL men det är knappast något fel som jag ser det att sätta det till 0x00 då det gör så att all I/O blir digital. Sen får folk gärna påpeka saker som är fel eller inte är bra men att bara säga att jag inte vet vad jag gör är bara oförskämt. Skulle du däremot skrivit t.ex:
"Du har nog missförstått något angående ANSEL då den inte bör initieras såhär, så läs igenom hur det fungerar igen på s. 48"

Skulle jag bara sett det som positivt. Så snälla påpeka gärna saker men tänk lite på hur ni formulerar er, det ger en mycket bättre stämning.
Användarvisningsbild
Icecap
Inlägg: 26703
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Vägrar fungera med PIC16F676

Inlägg av Icecap »

Se där... jag måste vara ovanligt trött för vill man inte ha någon analoga ingångar är det ju faktisk rätt med att ställa ANSEL till 0x00. Så jag får ursäkta mig på den, mitt fel.

Likaväl är det fel att inte vilja skriva en komplett initialisering "för att inte få skrivfel", visst, man kanske sparar lite skrivande men får så många andra problem istället! Det finns ett anta trådar där olika personer inte kan få allting att fungera och när de sedan lägger in rätt initialisering av allting fungerar det hela plötsligt och varje gång har det varit: "men det stod i databladet att reset/default-värdet var ..."

Att inte ställa allting rätt från början är att tigga om problem, även funktioner man inte använder kan vara viktiga att slå av fastän de inte borde vara på efter en reset.
sheazar
Inlägg: 40
Blev medlem: 12 maj 2008, 12:56:54
Ort: Göteborg

Re: Vägrar fungera med PIC16F676

Inlägg av sheazar »

Där håller jag med dig helt, och jag skulle haft kvar mer av innehållet i den koden jag postade. Dock har jag redan innan jag skrev min fråga tittat igenom databladet och testat alla former av initieringar jag kunde komma på. Jag har testat olika varianter på allting som jag tycker skulle kunna påverka men trots detta vill det inte.
bos
Inlägg: 2318
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Vägrar fungera med PIC16F676

Inlägg av bos »

Klistra in hela outputen från C-kompilatorn (den du får i output-fönstret) efter korrekt kompilering.
sheazar
Inlägg: 40
Blev medlem: 12 maj 2008, 12:56:54
Ort: Göteborg

Re: Vägrar fungera med PIC16F676

Inlägg av sheazar »

Build E:\Programering\PIC\MotorTest for device 16F676
Using driver C:\Program\HI-TECH Software\PICC\PRO\9.65\bin\picc.exe

Make: The target "E:\Programering\PIC\tmp.p1" is out of date.
Executing: "C:\Program\HI-TECH Software\PICC\PRO\9.65\bin\picc.exe" --pass1 E:\Programering\PIC\tmp.c -q --chip=16F676 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
Executing: "C:\Program\HI-TECH Software\PICC\PRO\9.65\bin\picc.exe" -oMotorTest.cof -mMotorTest.map --summary=default --output=default tmp.p1 --chip=16F676 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
HI-TECH C PRO for the PIC10/12/16 MCU family (Lite) V9.65
Copyright (C) 1984-2009 HI-TECH SOFTWARE
(1273) Omniscient Code Generation not available in Lite mode (warning)

Memory Summary:
Program space used 18h ( 24) of 3FFh words ( 2.3%)
Data space used 0h ( 0) of 40h bytes ( 0.0%)
EEPROM space used 0h ( 0) of 80h bytes ( 0.0%)
Configuration bits used 0h ( 0) of 1h word ( 0.0%)
ID Location space used 0h ( 0) of 4h bytes ( 0.0%)

Running this compiler in PRO mode, with Omniscient Code Generation enabled,
produces code which is typically 52% smaller than in Lite mode.
The HI-TECH C PRO compiler output for this code could be 12 words smaller.
See http://microchip.htsoft.com/portal/pic_pro for more information.

Loaded E:\Programering\PIC\MotorTest.cof.

********** Build successful! **********
bos
Inlägg: 2318
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Vägrar fungera med PIC16F676

Inlägg av bos »

> Configuration bits used 0h ( 0) of 1h word ( 0.0%)

Som jag misstänkte - du har inte satt några config-bitar. Gör man inte det så kan precis vilka skumma fel som helst uppstå. Fixa dessa så ska problemet lösa sig. Du använder __CONFIG() för detta. Exempel klippt från mitt eget projekt:

Kod: Markera allt

__CONFIG(UNPROTECT & LVPDIS & BORDIS & MCLRDIS & PWRTDIS & WDTDIS & INTIO);
Ovanstående bör funka i ditt fall, men ta det inte som garanti.
sheazar
Inlägg: 40
Blev medlem: 12 maj 2008, 12:56:54
Ort: Göteborg

Re: Vägrar fungera med PIC16F676

Inlägg av sheazar »

Tack för förslaget bos, jag hade tidigare satt bitarna i IDE:en men det fungerade tydligen inte så bra. Flyttade över detta till koden (fick ändra lite) och får nu istället outputen

Kod: Markera allt

    Configuration bits   used     1h (     1) of     1h word    (100.0%)
Dessvärre gör det ingen skillnad på slutresultatet.

Jag använde configen:

Kod: Markera allt

__CONFIG(UNPROTECT & BORDIS & MCLRDIS & PWRTDIS & WDTDIS & INTOSCIO);
Skriv svar