Nybörjarhjälp till pickit 2 sökes

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

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

Inlägg 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.
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

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

Inlägg 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:
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg 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.
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

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

Inlägg 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:
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg 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...
DrDjaevel
Inlägg: 61
Blev medlem: 4 december 2006, 21:21:26
Ort: Eskilstuna

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

Inlägg 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:
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg av sodjan »

> Jag är själv intresserad av att lära mig lite om.......

Varför nöja dig med "lite" ? :-)
GustafRG
Inlägg: 6
Blev medlem: 13 juni 2009, 01:49:35

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

Inlägg 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
DrDjaevel
Inlägg: 61
Blev medlem: 4 december 2006, 21:21:26
Ort: Eskilstuna

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

Inlägg av DrDjaevel »

sodjan skrev:>
Varför nöja dig med "lite" ? :-)
Måste starta nånstans... :D
Användarvisningsbild
Krajan
Inlägg: 12
Blev medlem: 31 mars 2006, 22:59:08
Skype: Krejstrup
Ort: Karlshamn
Kontakt:

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

Inlägg 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!
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg 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...
Användarvisningsbild
Krajan
Inlägg: 12
Blev medlem: 31 mars 2006, 22:59:08
Skype: Krejstrup
Ort: Karlshamn
Kontakt:

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

Inlägg 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å.
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

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

Inlägg 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?
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg 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.
Skriv svar