Nybörjare!
Nybörjare!
Tjabba! Jag har under en viss tid fått intresse utav microprocessorer/ I/O moduler pga mitt jobb(Fordons mekaniker)
Och är ivrig att lära mig mera angående att programmera dessa. Jag köpte en microprocessor för ett tag sedan, men jag är helt ställd när det gäller att programmera med koder. Det var inte likt någon parameter programmering som jag gjort innan.
Så min fråga är, hur skaffar jag kunskapen/lär mig att börja programmera? Finns det kurser? Eller bra start-kit?Någon bra litteratur som förklarar hur dessa moduler fungerar på "Insidan"? Arduino verkar ju stort, men är det något bra att börja med?
Som sagt, är inte hemma på programmering i koder. Så alla svar är välkomna. Tack på förhand!
Och är ivrig att lära mig mera angående att programmera dessa. Jag köpte en microprocessor för ett tag sedan, men jag är helt ställd när det gäller att programmera med koder. Det var inte likt någon parameter programmering som jag gjort innan.
Så min fråga är, hur skaffar jag kunskapen/lär mig att börja programmera? Finns det kurser? Eller bra start-kit?Någon bra litteratur som förklarar hur dessa moduler fungerar på "Insidan"? Arduino verkar ju stort, men är det något bra att börja med?
Som sagt, är inte hemma på programmering i koder. Så alla svar är välkomna. Tack på förhand!
Re: Nybörjare!
Hej! Till att börja med vill jag hälsa dig varmt välkomen till EF! 
Vad det gäller mikrokontrollers/mikroprocessorer så finns det flera vägar att gå. Arduino har du redan stött på. Kort beskrivet så är en Arduino en mikrokontroller med lite kringutrustning som gör att det är väldigt enkelt att koppla ihop den med andra enheter såsom temperatursensorer, vinkelgivare, kompasser, tryckgivare, o.s.v. Följande är naturligtvis bara min åsikt: Det som är Arduinons styrka är att det finns väldigt många bibliotek med färdig kod. Det som är dess svaghet är att det finns väldigt många bibliotek med färdig kod. Med det menar jag att om man inte är intresserad av att förstå hur det fungerar på djupet så är en Arduino klockren, även en total nybörjare kan få "det" att fungera (nästan oavsett vad det är) med minimal egen insats. Det är jättebra om man bara vill skapa en funktion, men mindre bra om man faktiskt vill förstå vad det är som händer, varför det händer, och hur mikrokontrollern fungerar internt. Jag har själv aldrig använd en Arduino, så jag kan inte uttala mig om den har några direkta fysiska begränsningar jämfört med en "ren" mikrokontroller typ AVR eller PIC.
Själv föredrar jag PIC. Så länge man gör hyffsat enkla saker så tycker jag att de är lätta att jobba med (jag tror inte att det är svårare med AVR, vissa saker skiljer med i grund och botten är de väldigt jämförbara, väldigt lika). För ett år sedan hade jag t.ex. behov av en enkel frekvensgenerator som skulle ge mig en fyrkantsvåg (väldigt enkel fyrkantsvåg utan några krav alls på stigtider, och med väldigt små krav på frekvensomfång). Det slutade med en liten PIC som jag buffrade utgångarna på (buffring gör att den kan driva mer ström än om man kopplar den direkt). Koden, om man bortser från "standardkoden" som i princip alltid är densamma (också bortsett från själva initieringen där man bestämmer diverse olika parametrar), blev fyra rader lång:
1: Växla utgången (om den var hög, gör den låg. Om den var låg, gör den hög)
2: Sätt registret TMR0 till ADC'ns (Analog to Digital Converter) mest signifikanta 8 bitar. TMR0-registret bestämmer hur många "varv" mikrokontrollern ska gå innan det skapas ett interrupt. När ett interrupt skapas går den in i rutinen Isr ovan, den enda rutinen som användes.
3: Sätt interrupt-flaggan för timer 0 till 0. Interrupt-flaggan är den som får manicken att gå till Isr-rutinen, nollas inte denna går den till Isr-rutinen på nästa "varv"
4: Starta en ny ADC-conversation. D.v.s. se till att den läser av det analoga värdet och gör det digitalt.
Alla namn i koden ovan kommer direkt från databladet. D.v.s. t.ex. registret "GODONE" (som sätts till en etta i punkt 4 ovan) är definierade i databladet. Man använder exakt samma namn/benämningar som i databladet. Just detta tycker jag gör det hela ganska enkelt. Det man måste kunna/förstå är grundläggande programmering, och det är en fördel om man kan C-syntax (det går även att programmera i assembler, det är lite av en smaksak. Personligen föredrar jag C, men för applikationen ovan hade assembler varit nästan lika enkelt).
Men kan man inte C-syntax, och inte vill lära sig, så är Arduino att föredra, just eftersom det finns så mycket färdig kod i bibliotek. Om du t.ex. kopplar in en DS1302 (realtidsklocka) till en Arduino så finns det både färdig kod och säkert även färdiga exempel på hur den ska kopplas. Till en PIC/AVR så finns det säkert kod att hitta online, men det brukar kräva att man tänker lite mer själv.
Jag tror att Arduino har vissa begränsningar som inte en ren AVR/PIC har, men jag kan på tok för lite om Arduino för att uttala mig om saken.
Men för att förstå hur en PIC/AVR fungerar på insidan så behöver man i princip bara läsa databladet. ALLT står där, bara man läser noga nog

Vad det gäller mikrokontrollers/mikroprocessorer så finns det flera vägar att gå. Arduino har du redan stött på. Kort beskrivet så är en Arduino en mikrokontroller med lite kringutrustning som gör att det är väldigt enkelt att koppla ihop den med andra enheter såsom temperatursensorer, vinkelgivare, kompasser, tryckgivare, o.s.v. Följande är naturligtvis bara min åsikt: Det som är Arduinons styrka är att det finns väldigt många bibliotek med färdig kod. Det som är dess svaghet är att det finns väldigt många bibliotek med färdig kod. Med det menar jag att om man inte är intresserad av att förstå hur det fungerar på djupet så är en Arduino klockren, även en total nybörjare kan få "det" att fungera (nästan oavsett vad det är) med minimal egen insats. Det är jättebra om man bara vill skapa en funktion, men mindre bra om man faktiskt vill förstå vad det är som händer, varför det händer, och hur mikrokontrollern fungerar internt. Jag har själv aldrig använd en Arduino, så jag kan inte uttala mig om den har några direkta fysiska begränsningar jämfört med en "ren" mikrokontroller typ AVR eller PIC.
Själv föredrar jag PIC. Så länge man gör hyffsat enkla saker så tycker jag att de är lätta att jobba med (jag tror inte att det är svårare med AVR, vissa saker skiljer med i grund och botten är de väldigt jämförbara, väldigt lika). För ett år sedan hade jag t.ex. behov av en enkel frekvensgenerator som skulle ge mig en fyrkantsvåg (väldigt enkel fyrkantsvåg utan några krav alls på stigtider, och med väldigt små krav på frekvensomfång). Det slutade med en liten PIC som jag buffrade utgångarna på (buffring gör att den kan driva mer ström än om man kopplar den direkt). Koden, om man bortser från "standardkoden" som i princip alltid är densamma (också bortsett från själva initieringen där man bestämmer diverse olika parametrar), blev fyra rader lång:
Kod: Markera allt
#define _LEGACY_HEADERS
#include "Pulseout.h"
void main(void)
{
Init();
while(1)
{
}
}
void Init(void)
{
/*Comment out if using simulator, ICD2, or ICE2000*/
#asm
call 0x3FF //Load Factory Calibration Value Into OSCCAL
bsf _STATUS,5 //BANK1
movwf _OSCCAL
#endasm
ANSEL = 0b00010001; // Select AN0
ADCON0 = 0b00000001; //Configure A/D - Select AN0, Left justified & enables A/D
TRISIO = PulseTris; // GPIO 3 output, GPIO 0,1,2,4,5,6,7 inputs
OPTION = TMRPRESCALE; // Timer0 internal clock, Prescaler assigned to WDT
GPIO = Off;
CMCON = 0x07; // //Turn Off Comparator Peripheral
VRCON = CLEAR;
TMR0 = CLEAR; //Clear Timer0
IOCB3 = CLEAR; //GP3 Interrupt On Pin Changed Disabled
T0IE = SET; //Timer0 Overflow Interrupt Enabled
T0IF = CLEAR; //Clear Timer0 Overflow Interrupt Flag
GIE = SET; //Enable All Interrupts
return;
}
void interrupt Isr(void)
{
PULSEOUT = PULSEOUT ^ 1; // Toggle the output.
TMR0 = ADRESH; //Set TMR0 register to the value from the ADC.
T0IF = CLEAR; //Clear Timer0 Interrupt Flag
GODONE = SET; //When ADC > 252, one ADC conversion will be done every other interrupt. This does not matter.
return;
}
2: Sätt registret TMR0 till ADC'ns (Analog to Digital Converter) mest signifikanta 8 bitar. TMR0-registret bestämmer hur många "varv" mikrokontrollern ska gå innan det skapas ett interrupt. När ett interrupt skapas går den in i rutinen Isr ovan, den enda rutinen som användes.
3: Sätt interrupt-flaggan för timer 0 till 0. Interrupt-flaggan är den som får manicken att gå till Isr-rutinen, nollas inte denna går den till Isr-rutinen på nästa "varv"
4: Starta en ny ADC-conversation. D.v.s. se till att den läser av det analoga värdet och gör det digitalt.
Alla namn i koden ovan kommer direkt från databladet. D.v.s. t.ex. registret "GODONE" (som sätts till en etta i punkt 4 ovan) är definierade i databladet. Man använder exakt samma namn/benämningar som i databladet. Just detta tycker jag gör det hela ganska enkelt. Det man måste kunna/förstå är grundläggande programmering, och det är en fördel om man kan C-syntax (det går även att programmera i assembler, det är lite av en smaksak. Personligen föredrar jag C, men för applikationen ovan hade assembler varit nästan lika enkelt).
Men kan man inte C-syntax, och inte vill lära sig, så är Arduino att föredra, just eftersom det finns så mycket färdig kod i bibliotek. Om du t.ex. kopplar in en DS1302 (realtidsklocka) till en Arduino så finns det både färdig kod och säkert även färdiga exempel på hur den ska kopplas. Till en PIC/AVR så finns det säkert kod att hitta online, men det brukar kräva att man tänker lite mer själv.
Jag tror att Arduino har vissa begränsningar som inte en ren AVR/PIC har, men jag kan på tok för lite om Arduino för att uttala mig om saken.
Men för att förstå hur en PIC/AVR fungerar på insidan så behöver man i princip bara läsa databladet. ALLT står där, bara man läser noga nog

Re: Nybörjare!
Föreslår följande:

ISBN-10: 0750687096 | ISBN-13: 978-0750687096 av Lucio Di Jasio
Tillsammans med 73-344-63

och
73-874-11

Gärna tillsammans med en ICD3 för problemfri programmering/debugging
Du kommer att få mycket skojj med detta, garanterat.
Till detta någon lämplig bok i C-språket.

ISBN-10: 0750687096 | ISBN-13: 978-0750687096 av Lucio Di Jasio
Tillsammans med 73-344-63

och
73-874-11

Gärna tillsammans med en ICD3 för problemfri programmering/debugging
Du kommer att få mycket skojj med detta, garanterat.
Till detta någon lämplig bok i C-språket.
- Swech
- EF Sponsor
- Inlägg: 4750
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: Nybörjare!
PIC32 är väl inte riktigt det första man testar för att blinka med en lysdiod t.ex.
Det kommer bara att sluta med att prylarna blir oanvända
Tröskeln är för hög
Swech

Det kommer bara att sluta med att prylarna blir oanvända
Tröskeln är för hög
Swech
Re: Nybörjare!
Icke då, tröskeln är inte högre än nått annat, lägre än PIC16 till exempel.
Bara för att det är en 32-bitars processor innebär ju inte att det är svårare, snarare enklare, samt att den räcker betydligt längre.
Bara för att det är en 32-bitars processor innebär ju inte att det är svårare, snarare enklare, samt att den räcker betydligt längre.
Re: Nybörjare!
Jag vill inte späda på nått processorkrig, utan skriver bara min erfarenhet här:
Det som fick mig att börja var just enkelheten med en ren AVR (Säkert lika enkelt med en PIC, men inte riktigt lika enkelt med större processorer, men ja).
Jag köpte en hålmonterad AVR-processor och ett sådant vitt labb-däck där man kan sätta i komponenter (breadboard).
Sen köpte jag en 25polig dsub-kontakt och lödde på sladdar på den och satte kontakten i parallellporten och kopplade in sladdarna till rätt ben på AVR:en i breadboardet. En lysdiod och ett motstånd var nog inblandat också för att få nån effekt ut.
Typ en sån här programmerare (men jag skippade motstånden)
http://avrfornoobs.wordpress.com/2011/09/06/14/
Mjukvaran han använder var samma som jag använde.
Jag hade nog inte ens en avkopplingskondensatorhttp://en.wikipedia.org/wiki/Decoupling_capacitor, det fungerade bra ändå som tur var.
Sen är det viktigt att vara vetgirig och läsa på om varför man ska ha en avkopplingskondensator och vad som händer om man struntar i den o.s.v.
MVH: Mikael
Det som fick mig att börja var just enkelheten med en ren AVR (Säkert lika enkelt med en PIC, men inte riktigt lika enkelt med större processorer, men ja).
Jag köpte en hålmonterad AVR-processor och ett sådant vitt labb-däck där man kan sätta i komponenter (breadboard).
Sen köpte jag en 25polig dsub-kontakt och lödde på sladdar på den och satte kontakten i parallellporten och kopplade in sladdarna till rätt ben på AVR:en i breadboardet. En lysdiod och ett motstånd var nog inblandat också för att få nån effekt ut.
Typ en sån här programmerare (men jag skippade motstånden)
http://avrfornoobs.wordpress.com/2011/09/06/14/
Mjukvaran han använder var samma som jag använde.
Jag hade nog inte ens en avkopplingskondensatorhttp://en.wikipedia.org/wiki/Decoupling_capacitor, det fungerade bra ändå som tur var.
Sen är det viktigt att vara vetgirig och läsa på om varför man ska ha en avkopplingskondensator och vad som händer om man struntar i den o.s.v.
MVH: Mikael
- Krille Krokodil
- Inlägg: 4062
- Blev medlem: 9 december 2005, 22:33:11
- Ort: Helsingborg
Re: Nybörjare!
Man behöver ju ingen hårdvara för att sätta igång, stega sin kod i simulatorerna i AVR Studio eller MPLab kan vara bra att början eftersom att man ser precis vad som händer (och inte händer) i processorn.
Tutorials finns det gott om, ex: http://ermicroblog.wordpress.com/2008/1 ... utorial-1/
Tutorials finns det gott om, ex: http://ermicroblog.wordpress.com/2008/1 ... utorial-1/
Re: Nybörjare!
Och vill du titta på assembler-programmering till
pic-processorer så finns den här sidan:
http://www.piclist.org/techref/microchip/routines.htm
Vissa saker kanske inte är det man börjar med,
men om du är nyfiken och vill se hur det kan se ut.
En del programsnuttar har kommentarer så att man
kan se ungefär vad som händer.
Det är lite olika instruktioner till olika familjer.
Pic 18 har lite fler än pic 16.
En sökning på internet på t.ex.
pic18 instruction set summary
borde ge lite länkar till sidor där man kan läsa mer
om instruktionerna.
pic-processorer så finns den här sidan:
http://www.piclist.org/techref/microchip/routines.htm
Vissa saker kanske inte är det man börjar med,
men om du är nyfiken och vill se hur det kan se ut.
En del programsnuttar har kommentarer så att man
kan se ungefär vad som händer.
Det är lite olika instruktioner till olika familjer.
Pic 18 har lite fler än pic 16.
En sökning på internet på t.ex.
pic18 instruction set summary
borde ge lite länkar till sidor där man kan läsa mer
om instruktionerna.
Re: Nybörjare!
Fast där beror det nog på hur ens läggning är, gillar man elektronik mer än programmering så tycker man nog att lysdioden som blinkar är en magnitud häftigare än att köra en simuleringKrille Krokodil skrev:Man behöver ju ingen hårdvara för att sätta igång, stega sin kod i simulatorerna i AVR Studio eller MPLab kan vara bra att början eftersom att man ser precis vad som händer (och inte händer) i processorn.

Själv kör jag en Pickit2, PIC'ar i 16 och 18-serien och sen PBP på det, det är alltså PicBASIC Pro, en mycket kompetent kompilerande BASIC för PIC, lite för kompetent för BASIC-motståndarnas självförtroende hehe..
Det du kommer att välja är om du kör direkt i asm, eller om du kör ett kompilerat språk (typ BASIC eller C), med asm har du full kontroll på allt men inlörningströskeln är betydligt större.
Re: Nybörjare!
Simulatorer i all ära, de är rätt handikappade tyvärr, då simulering av externa komponenter i princip är obefintlig.
Du har också full kontroll i C, i alla fall om man jobbar med PICar, dock slipper man en massa hushållsgöra, eftersom kompilatorn gör det åt dig.med asm har du full kontroll på allt men inlörningströskeln är betydligt större.
Re: Nybörjare!
Får tacka så mycket för detta varma välkomnandet och all info! Och Walle, Det var just det som gjorde mig besviken på Arduino, att det finns så mycket färdigt. Tyckte inte jag lärde mig ett dugg. (Det var ett sånt chip jag beställde och provade lite på) Men som sagt. Tack alla och nu ska jag försöka ge mig in i microprocessorernas värld!
Re: Nybörjare!
Hur gör du extremt tidskritiska saker då ?TomasL skrev:Simulatorer i all ära, de är rätt handikappade tyvärr, då simulering av externa komponenter i princip är obefintlig.Du har också full kontroll i C, i alla fall om man jobbar med PICar, dock slipper man en massa hushållsgöra, eftersom kompilatorn gör det åt dig.med asm har du full kontroll på allt men inlörningströskeln är betydligt större.
Jag säger inte att man nödvändigtvis ska köra asm (jag gör det inte själv), men det finns onekligen fördelar med det också.
Sen kan man ju ta genvägen med att skriva det mesta i ett högnivåspråk och sen skriva kritiska delar och subrutiner i inline-asm.
- Swech
- EF Sponsor
- Inlägg: 4750
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: Nybörjare!
Att föreslå ett etherenet utvecklingskit till en nybörjare är
som att föreslå en formel1 bil till en som skall ta körkort
Swech
som att föreslå en formel1 bil till en som skall ta körkort
Swech
Re: Nybörjare!
Det beror ju på vad som menas med "tidskritiskt", en bra kompilator skapar lika bra eller bättre maskinkod som den mänskliga hjärnan, i de allra flesta fallen.
Dessutom har ju man full hårdvaruåtkomst, i alla fall i MPLAB-C.
Den enda assemblerkoden vi använder är i en interruptwrapper, och vi har tidskritiska delar.
Swech, inte då, du behöver ju inte använda de delarna om du inte vill, dock är det extremt kostnadsbesparande, då man slipper köpa nytt i takt med att man utvecklas.
tecno, det är inte häftigt, men som jag skrev ovan väldigt kostnadsbesparande, och man kan göra lite mer, än enbart blinka LED, vilket man lär sig på någon timma eller två, typ.
Dessutom har ju man full hårdvaruåtkomst, i alla fall i MPLAB-C.
Den enda assemblerkoden vi använder är i en interruptwrapper, och vi har tidskritiska delar.
Swech, inte då, du behöver ju inte använda de delarna om du inte vill, dock är det extremt kostnadsbesparande, då man slipper köpa nytt i takt med att man utvecklas.
tecno, det är inte häftigt, men som jag skrev ovan väldigt kostnadsbesparande, och man kan göra lite mer, än enbart blinka LED, vilket man lär sig på någon timma eller två, typ.