Sida 5 av 8

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 16 juni 2009, 21:42:03
av bos
Crille93 skrev:Finns det något blad någonstans så man kan se vad dom 20 benen heter?
Ja. All sån information hittar du i databladet för din PIC.

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 16 juni 2009, 22:02:22
av Crille93
Hur är det PICen fungerar? är det själva PICen som skickar "plus" och sedan så har alla saker en gemensam "minus" eller är det tvärtom eller har PICen både "plus" och "minus"? Och om den har både plus och minus så undrar jag, vilka ben är plus och vilka är minus?. :roll:

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 16 juni 2009, 22:59:59
av sodjan
Vad 17 menar du igentligen med "plus" och "minus" ?
Och vad menar du med att "skicka" ??

Du borde kanske kolla något grundläggande om digitalteknik.
Ingenting "skickas" i princip. Allt handlar om nivåer och det finns två olika nivåer :

- "1" eller "hög", vanligtsvis ca 5V om man använder 5V's kretsar (men kan även vara t.ex 3.3 V).
- "0" eller "låg", ca 0V i alla lägen.

När det gäller pinnar så kan de antingen vara utgångar och då *driver* de 1/0, hög/låg
enligt vad ditt program sätter pinnarna till genom PORTx registren.

Eller så är de ingångar och då "lyssnar" de istället efter 1/0, hög/låg, och du kan
"läsa av" pinnarna genom att läsa från PORTx registrerna.

TRISx registrena väljer vilka pinnar som ska vara ut- resp ingång och det gör
du själv i ditt program (LÄS DATABLADET FÖR BÖVELEN!)

Sedan har PIC'en en egen spänningsmatning, vanligtsvis 5V.

Sedan, och här verkar du ha snurrat till det ordentligt, alla nivåer/spänningar är
rellaterade till en gemensam "nolla" (kallas även "jord", "0V" eller "GND", det
är exakt samma sak). Dels har naturligstvis PIC'en själv en GND pinne och alla andra
kretsar, givare, LCD'er, whatever måsta använda samma nolla/jord/GND.

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 16 juni 2009, 23:18:32
av Crille93
Så strömmen går från
strömkällan-> PICen-> Lysdiod-> Gemensam jord?

Jag hade fått totalt stopp och kom inte på vad jag skulle skriva så därför skrev jag plus och minus. Trodde ni skulle förstå :roll:

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 16 juni 2009, 23:40:21
av sodjan
> Så strömmen går från
> strömkällan-> PICen-> Lysdiod-> Gemensam jord?

Du saknar motståndet, men det kanske ingår i "Lysdiod"... :-)
Det "fungerar", men annars är det vanligare att man kopplar så här :

Strömkällan => LED/motstånd => PIC-pinnen => jord (via PIC'ens egen GND pinne).

Anledningen är att CMOS kretsar vanligstvis kan "sänka" mer ström (d.v.s *in*
till pinnen) än de kan "mata" (d.v.s *ut* från pinnen). Man kan även separera
matningen till processorn (som man vill ha så störningsfri som möjligt) från matningen
till lysdioderna och annat som kanske tål lite mer störningar. Om man kopplar som du
beskrev så får man en varierande strömförbrukning på PIC'ens matning vilket *kan*
ge en del oönskade störningar och ökar kravet på avkoppling. Inget stort problem
när man sitter hemma och labbar kanske, man annars kan det vara viktigt.

En liten sidoeffekt är att man alltså tänder LED'en med 0/låg på pinnen, vilket
kan vara lite förvirrande i början, men helt normalt...

Ett annat sätt (och bättre) är att låta PIC'en styra en extern transistor (t.ex
en liten switch-MOSFET som tar hand om drivningen av lysdioden, då försvinner
lysdiodsströmmen helt från processorn, vilket är bra. Om man har så där 10
eller fler lysdioder som ska vara tända samtidigt så är det den enda läsningen
som fungerar riktigt bra och stabilt. Men om det bara är några LEDs och man
kör dom med 5-10 mA/st, så är det inget problem att direktdriva dom...

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 24 juni 2009, 00:33:05
av DrDjaevel
Det här är förvisso o.t men vill i alla fall passa på att "säga":
mycket intressant tråd. Jag är själv intresserad av att lära mig lite om PIC (eller AVR, har inte bestämt mig, låt oss säga MP). Har läst en del digital elektronik utan att "röra" vid MP, tyvärr. Men det är alltid lärorikt att lära genom andras frågor och ibland misstag. Stort tack för ett par bra länkar med information att läsa och förhoppningsvis lära något.

TACK! :tumupp:

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 24 juni 2009, 00:35:01
av sodjan
> Jag är själv intresserad av att lära mig lite om.......

Varför nöja dig med "lite" ? :-)

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 24 juni 2009, 02:56:12
av GustafRG
Hej!

Jag är själv något av en nybörjare på området PIC, och har fått mycket bra hjälp, bland annat ifrån "sodjan"!
Jag tänkte att jag kunde försöka tillföra denna tråd nåt som tack för hjälpen.

Jag har läst en del programmering på högskolenivå, t.ex: C#, Java, ASP, och C, och det var egentligen i samband med C -språket jag fick upp ögonen för PIC, just för att de går att programmera med C.

Så jag tänkte att om du har kunskaper i C eller BASIC/VisualBasic.
C liknar ju mycket Java, C++, och C# i sin uppbygnad och syntax och det finns bra utvecklingsverktyg för dessa språk, bl.a. MPLAB tillsammans med "HI-TECH PICC C Lite" Kompilatorn.

Att programmera PIC med C/VB är kanske inte lika effektivt som att skriva "effektiv" assembler, men de språken tycker jag är lättare att förstå som nybörjare tror jag. Och om man inte är expert på datorarkitektur och förstår hur bitar flyttas mellan register så är det lättare som "ingång".

C-koden översätts sedan till HEX-maskinkod(det som PIC-datorn förstår) och om du vill kan du kolla ungefär vad resultatet av koden i C blir i Assembler i MPLAB i menyn "View --> Disassembly Listing". Detta blir rätt rörig assembler dock!

Detta är inte menat som ÄNNU en sak att lära sig, bara ett alternativt sätt att lära sig programmera PIC.
Du behöver fortfarande en grundläggande förståelse för hur själva kretsen är uppbyggd, vilka portar (PORTA, PORTB, etc) som finns att tillgå, samt vilka speciella funktioner de olika pinnarna har (ANSEL, CLKOUT, PGM, VSS, VDD, etc).

Ett exempel på hur koden för att blinka med en lysdiod på PORTA ser ut i C:
Jag antar att du har en PIC16F629 på ditt LPC demo board.
Förutsatt att lysdioden(DS1), i serie med ett lämpligt motstånd(R3), är kopplad till RC0 på PORTC(standard på LPC Demo board).

Kod: Markera allt

#include	<pic.h> /* HI-TECH PICC C Kompilatorns egen header fil som länkar */
					/* vidare till rätt pic:s header/include-fil */

/*
 * LED Diod Blink
 * Blinkar med en diod på PORTC PINNE 0, "RC0"
 * RC0 är tändtråd för DS1 på "PICKit Low Pin Count Demo Board"
 * och tänder dioden genom att sluta mot +5V/VDD
 * Koppling: 0V/VSS --> DS1(LED) --> R3(470 Ohm) --> RC0;
 * 
 * Koden testad på ovan nämnt demo-kort med PIC16F690.
 * Koden får användas fritt och på egen risk.
 *
 */

#ifndef _XTAL_FREQ
 /* Om klockfrekvensen inte är definierad så gör det här */
 
 #define _XTAL_FREQ 4000000
/* detta gör man för att kalibrera __delay_us() and __delay_ms() */
#endif

#define DIOD RC0	/* Tala om för kompilatorn att du har ett namn eller symbol */
					/* för pinnen som heter RC0 som heter "DIOD" 				*/

main(void)
{

	ANSEL = 0;		/*	Inga analoga funktioner på, bara digitala (1/0)	*/
	ANSELH = 0;
	PORTC = 0;		/* Rensa PORTC, hela porten till 0 */
	TRISC = 0;		
					/*	
					 	"TRIS" bestämmer riktning på portar och dess pinnar		
					 	dvs. input/output. I det här fallet är PORTC:s pinne	
					 	tändtråd för DS1, dvs en output.				
					 	TRIS "0" betyder output och "1" betyder input.			
					 	För PORTC blir det alltså TRISC = 0
					
					*/	

	while(1)		/*	Oändlig loop "1" är alltid "1", dvs sant. */
	{
		DIOD = 1;				/*	Tänder lysdioden på RC0 genom att sluta mot +5V/VDD	*/
		
		__delay_ms(100);		/*	__delay_ms() är en inbyggd funktion för att göra en paus på x millisekunder*/
		__delay_ms(100);		/* 	låter DIOD vara "1" i ca 1/3 sekund.*/
		__delay_ms(100);
		
		DIOD = 0;				/*	Släcker lysdioden PÅ RC0	*/
		
		__delay_ms(100);		/*	se ovan */
		__delay_ms(100);		/* 	låter DIOD vara "0" i ca 1/3 sekund.*/
		__delay_ms(100);

/*------------ Koden nedan gör samma sak men på ett annat sätt---------------------------*/
		
		
		PORTC = 0b00000001;	   /*	PORTC har åtta pinnar som vardera representerar 
								*	en bit dess register och vi vet att vi vill blinka dioden med Pin 0
								*	så vi väljer den pinnen/biten i binär form med genom
								*
								*	*-------------------------------------------------*
								*	*	"0b(binär)	RC7	RC6	RC5 RC4 RC3 RC2 RC1 RC0"  *
								* 	*	"          	0   0	0	0	0	0	0	1     *
								*	*-------------------------------------------------*
								*
								*	att välja den som 1 dvs "på" eftersom den sluter mot +5V/VDD och 
								*	därför tänder dioden. De andra pinnarna kan vara vad som helst.
								*	I det här exemplet låter vi de vara "0"
								*/

		__delay_ms(100);		/*	se ovan*/
		__delay_ms(100);
		__delay_ms(100);

		PORTC = 0b00000000;		/*	Släcker lysdioden */

		__delay_ms(100);		/*	se ovan*/
		__delay_ms(100);
		__delay_ms(100);
	
	}   /* Här tar while loopen slut - och börjar om igen!*/
}

Det ser ut som mycket kod men det är MYCKET kommentarer.
Det finns en del exempelkod i C med på skivan till PICKit2, och det finns mycket exempelkod på nätet, varav en hel del här på forumet.

Jag hoppas detta är till någon hjälp, och lycka till med PIC-programmeringen.
/GustafRG

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 24 juni 2009, 23:38:36
av DrDjaevel
sodjan skrev:>
Varför nöja dig med "lite" ? :-)
Måste starta nånstans... :D

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 23 juli 2009, 22:33:22
av Krajan
GustafRG:
Du är en hjälte! :)
Jag köpte en PICkit2 med en demo-platta för några dagar sedan... å tänkte börja med att koda i C så att jag lite "lättare" kan lära känna PIC innan jag ger mig in i ASM-träsket (det var ju dock lite drygt 15 år sedan jag kodade ASM senast - på HC11) :roll:
Men fasen vad jag blev besviken på att inget av de demo/exempel som fanns inte finns tillgängliga i C :evil:

Det första jag tänkte på med din kod var att det borde väl vara en #include på _16f690... men där missade jag att MP slänger med det till kompilatorn (definierat i projektet) :vissla:
Men delay-funktionen... tar den inte högre argument än 100?? Tre anrop på raken är väl annars inte helt optimalt? :)

Tack för snabbisen Gustav, det var uppiggande!

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 23 juli 2009, 22:45:45
av sodjan
> å tänkte börja med att koda i C så att jag lite "lättare" kan lära känna PIC innan jag ger mig in i ASM-träsket

Fel ordning.

*Först* ASM tills du förstår hur en PIC fungerar. Från några veckor till 6-12 månader
beroende på bakgrund (både av programmering generellt och programmerbar elektronik)

*Sedan* kan du välja språk för den fortsatta programmeringen.

> Men fasen vad jag blev besviken på att inget av de demo/exempel som fanns inte finns tillgängliga i C

Det *kan* ju finnas än förklaring till det. T.ex att även Microchip anser att ASM
är den bättre introduktionen till PIC.

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 23 juli 2009, 22:54:30
av sodjan
GustafRG:

> Att programmera PIC med C/VB är kanske inte lika effektivt som att skriva
> "effektiv" assembler, men de språken tycker jag är lättare att förstå som
> nybörjare tror jag. Och om man inte är expert på datorarkitektur och förstår
> hur bitar flyttas mellan register så är det lättare som "ingång".

Om man inte "kan" PIC-arkitekturen och inte vet hur "bitar flyttas mellan register"
så spelar det inte speciellt stor roll vilket språk man väljer. Man kommer i alla fall
att ha stora problem att få någonting alls att fungera.

Och arkitektur och att "flytta bitar" lär man sig enklast och bäst via lite ASM kod.

Det hela beror som vanligt helt på vad som är syftet med det hela.
Är det att faktiskt lära sig PIC ordentligt från grunden ? Kör ASM.
Eller är det bara för att snabbt kunna slänga ihop något hyggligt fungerande projekt
utan närmare kunskap om varför och hur det fungerar ? Kör vad du vill...

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 23 juli 2009, 23:10:49
av Krajan
Ja du sodjan...
Jag vill gärna använda ett språk som jag behärskar till fullo medan jag lär mig processorn.
Jag har undervisat och även skapat laborationer på högskolenivå i mikrodatorteknik och realtidssystem, men det var flera år sedan jag lämnade den tjänsten för annat. Nu har jag blivit för bekväm (andra intressen) för att ta mig tiden att lära ett nytt instruktionsset när jag kan lösa samma uppgifter i C. Det ska inte bli ett hinder (tidsförlust) för då tappar man intresset.

Det är ju helt uppenbart att Microchip framhåller assemblerspråk till sina PIC-processorer. Men det finns kanske även en anledning att det finns C kompilatorer (med flera) till PIC-familjen. MC gör ingen egen, för det är andra tredjepartare bättre på.

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 23 juli 2009, 23:11:54
av E85
Jag har väldigt svårt att förstå varför ASM hela tiden sägs vara ett absolut måste att starta med. Jag har aldrig rört ASM utan började med C och har klarat mig bra i ett hyfsat stort antal enkla till avancerade projekt.

Vad är det man lär sig så mycket bättre i assembler än om man bara läser databladet och kör på C direkt?
Vad kan man inte göra i C?
Varför lära sig assembler i 6-12 mån om man ändå tänkt gå vidare till C senare?

Re: Nybörjarhjälp till pickit 2 sökes

Postat: 23 juli 2009, 23:16:00
av sodjan
> MC gör ingen egen...

Jorå.
Till PIC18 och uppåt har de helt egna.
Till PIC10/12/16 har de det via ett uppköpt företag.