Syftet är inte att inlägget ska visa "sanningen" eller "lösningen". Vilka skor som känns bekväma är helt individuellt...
Tanken är istället att väcka lite inspiration hos de som tycker att programmering av mikrokontrollers känns som en enda uppförsbacke.
Kan även tillägga att det inte gäller någon speciell typ av mikrokontroller eller något speciellt språk.
Texten fram till nästa "--------" är bara lite (nåja host..) bakgrund för min del.
Hoppa över om ni inte orkar läsa.
När jag blev medlem här så kunde man förstås inte undgå inlägg av typen "Det vore lättare att göra med en PIC/AVR"
och efter ett tag blev man förstås sugen att lära sig bemästra denna "problemlösare".
Efter den obligatoriska tråden där jag ställde samma frågor som många andra (vilket jag förstås inte visste då) så insåg
jag snabbt att detta var ett ämne där man förväntas kunna namnen på allt direkt (se svaren i tråden).
Uppförsbacken var påbörjad.
Den fortsatte förstås så fort jag börjat. (Se här om ni vill). Jag försökte överföra den klassiska "blinka med en lysdiod"
till en PIC-krets men det blev bara problem. Kollade allt jag kunde tänka mig och höll på att få fnatt.
Tillslut kom Sodjan på att det var fel i den versionen av XWisp2. Nämnde jag att uppförsbacken var påbörjad?
Sedan har jag fått alla möjliga fel:
En version av XWisp2w som rapporterade om att det var fel på "fuses" i en adress som inte ens skulle ha några fuses.
En annan version som lät mig "tanka över" kod till varje PIC-krets enbart två gånger, sedan fick jag fel.
Felmeddelande om att MPLAB inte kunde skriva till COF-filen när två "symboler" (variabler) var bortkommenterade....
MikroBasic-kod som get helt tokiga resultat på lysdioder när jag lagt till en rad, trots att raden inte utförde något.
Tömd linker-fil till MPLAB.
osv osv osv....
Lagom kul att upptäcka sådana orsaker när man nött koden i evigheter.....
Flera gånger har jag letat fel i kod och lusläste datablad tills jag fått migrän.
Man har sååå gärna velat hitta felen. Trots veckors pauser,
flitigt läsande, genomgång av allt man någonsin kan tänka sig,
men ändå fel. Också är det någon fånig grej som löser problemet.
Jag har t.ex gjort en tråd om ett problem där jag tillslut fotade labplattan
och *då* såg jag att jag hade 1k motstånd istället för 10k.
Det där med motståndet är ett typiskt exempel på hur det kan bli
när man kämpat tills det går lite för fort och man missar de enklaste sakerna.
Ett annat exempel är när jag totalt glömt skillnaderna mellan PIC16 och PIC18
eller missat helt grundläggande saker.
Jag har på senare tid bävat inför varje projekt som krävt PIC-programmering
just eftersom det alltid har börjat lugnt och roligt, men *alltid* blivit till något
irriterande och påfrestande hopplöst problem, även om jag testat med långa
pauser och gjort annat både i och mellan projekten.
I maj i år lämnade jag mitt påbörjade assembler-projekt med etshylla-belysning.
Dels pga alla problem och dels för att det var roligare att vara ute att jobba när det var varmt.
Fem månader senare tog jag fram samma kod-projekt igen, mest för att jag kände för att göra något
innan sovdags och dels för att inte glömma bort hur man gjorde.

Faktiskt så gick det bra. Gjorde en PWM-grej. Fixade så man kunde styra den med en pot.
Vad 17...? Det känns *kul!* ??
Dagen efter lockade koden igen. Satte upp en till timer och den fungerade utan fel på första försöket.
Hmm... har det lossnat? Varför? Hur? Insåg att jag programmerade assembler till PIC ungefär lika
lätt och avslappnat som jag annars programmerar PHP (ett av mina favoritspråk).
Efter mycket om och men så vågade jag skriva ett litet inlägg om det.
Trodde ju först att det var något tillfälligt ryck jag fått.

Men nu är faktiskt det projektet klart!
PWM-styrning av lysdioder, meny med tre funktioner som styrs med enbart en knapp, osv.
Jag fattar ingenting:
Först kämpar man i några år och önskar att det ska "lossna" men det blir bara problem.
Efter fem månader så sätter man sig bara och gör klart sitt livs första riktiga PIC-baserade projekt!

Om det var sådär j-kla lätt så kunde det väl ha fått lossna tidigare?

("Lossna" = Att man kan sitta och knappa och det *blir* saker, programmera utan att det tar tvärstopp hela tiden.)
-----------
Ok, ska vi ta det jag egentligen *skulle* skriva om?

Varför lossnade det?
Ärligt talat är jag inte säker. Jag har tagit långa pauser tidigare, så den variabeln tror jag inte riktigt på som avgörande.
Visst: Det *är* jättebra att ta pauser. Ta en fika, promenad, tänk på något *helt* annat, osv.
Jag kan däremot säga att det känns annorlunda och lättare nu.
Där tycker jag att många gör fel. Jag fattar inte varför det ska vara så intensivt och allvarligt som
det blir i många trådar där folk behöver hjälp.
Hm, jag insåg just en grej... Det var inte bara programmeringen jag tog paus från i somras:
Jag var knappt *här* heller.

Här är iallafall några tips:
- Vet du vad du håller på med?
- Har du kul eller känner du dig tvingad?
Hatar du databladet eller sitter du och ler och tänker "shit, allt står ju här!" ?
Det kan vara oändliga timmar med koden eller någons "RTFM!"-inlägg som ökar frustrationen och då sätter
reptilhjärnan igång. Vips fattar man ingenting. Det kan vara språket eller matten som begränsar.
Att då försöka förstå hela databladet eller felmeddelanden är som att försöka trä på en 5 nummer
för liten sko. Det går säkert, men kommer du att ha kul under tiden?
..för det var väl därför som du började med det här?
Steg 1 alltså: Ta det inte så allvarligt. Luta dig tillbaka.
Försök att se det som en kul utmaning.
Är det kämpigt så kanske du har gått för fort fram?
- Har du kul eller känner du dig tvingad?
- Lugn och fin!
- Ta en sak i taget. Skriv/felsök inte hela koden på en gång.
Vet du vad man måste börja med? Är alla config-register inställda som de ska? Då kan du gå vidare.
Gå igenom sida för sida. I/O, timers, osv och "ställ in" grej för grej så det är som det ska. Stäng gärna av
interrupt, analoga ingångar mm när du kommer dit. När du gått igenom allt sådant (man brukar hamna på
sidor om "Instruction set summary" i databladet då) så brukar jag låta MPLAB (eller vad man använder för
att göra om källkod till .hexfil) "Bygga" (Build All) koden för att se så jag inte snavat någonstans.
Sedan tar man steg för steg. Vad behöver du ha i koden? Läsa av en knapp? LCD? Sekunder och minuter?
Ta en av dem i taget. Få en sak att fungera innan du tar nästa. Ska en pot styra något? Använd ett
fast värde istället för poten tills det-som-ska-styras fungerar. Verifiera varje sak. Sedan, när alla delar
är klara och testade så kan du låta det ena styra det andra. - Verifiera. Dvs, kolla så det du säger dig veta, faktiskt är samma sak som det som verkligen händer.
Försök att ta *en* sak i taget. T.ex först config-register. Verifiera CPU'n (klura ut hur man gör det med oscilloskop)
så du slipper anta att den går rätt och att det är något annat som gör att en timer gör så en lysdiod blinkar för sakta...
Hur vet du att du får ett interrupt när du vrider på poten? Kan alla utgångar ge 5V? osv. - Ha inte för bråttom med att svara på inlägg om ditt problem.
Det är lätt att tänka "Om jag svarar snabbt så kommer hjälpen snabbt och då kommer jag snabbt vidare".
Glöm det! Man missar alltid något då. Apropå det: Ta med *allt*. Det är lätt att tro att "det här har ingen
betydelse" eller "det här har jag kollat" när man ska skriva ett inlägg.
Förresten: Försök att lösa problemen utan forumet. Se det som en sport så långt det går
och ta bara upp problemet när du känner att du inte kommer längre på egen hand. - Ta tid på dig att förstå vad som står i databladet vid det du vill göra. Hoppa inte över det.
Hur ska man kunna felsöka om man inte förstår hur det ska vara?
Fråga eller sök mer info.
- Ta en sak i taget. Skriv/felsök inte hela koden på en gång.
Slutligen: Jag skriver ju att man ska ta det lugnt.
Det är främst riktat till dem som liksom jag nötte datablad och kod tills man höll på att få licensierat tokfnatt.
För andra kan det lika gärna vara tvärt om på den punkten, dvs att man tagit det lite för lugnt.
Resten gäller för båda "typerna".

..Så nu kommer aldrig få några problem mer? Det sa jag inte.
För min del så sitter jag inte längre fast som superlim så fort det ska göras något.
Det går mycket lättare och jag löser de flesta klurigheterna själv, men ändå lär man förstås köra fast.
Syftet med tråden är att ni som känner igen er kanske kan hitta något som underlättar för er.
Har ni fler tips? Skriv gärna i tråden.