Stap 2: Programmering en Micro selectie
Omdat dit zo klein mogelijk moest gebruikte ik een 20pin SOIP 16F88. Dit was een 300MIL brede versie, Microchip hebben een 150mil SSOIP (mager, kleine omtrek pakket), maar gezien het feit dat het apparaat was om hand prototyped, ik wilde gebruiken een grotere gemakkelijker om chip.
Uiteraard een SOIP pakket gewoon passen in een programmeur zodat ik moest gebruiken ICSP... wat in een heleboel verdriet resulteerde! ICSP is een manier van de programmering van de microcontroller, terwijl het nog in een circuit. ICSP staat voor In Circuit Serial programmeren en wordt vaak gebruikt om program 'lege' boards, of bijwerken van software zonder unsoldering/socketing van de microcontroller.
Ten eerste las ik niet genoeg over ICSP toe te voegen het juiste circuit voor het afhandelen van ICSP in mijn eerste prototype. Dan lees ik niet het gegevensblad van de microchip met betrekking tot een aantal extra pinnen op de 20pin 16F88SOIP. Deze pinnen zijn de AVss en AVdd pinnen. Zij bieden gewoonlijk de spanningen van de verwijzing voor de A/D converter.
Ik nam een tijdje om erachter te komen dat deze pinnen moeten worden aangesloten (ik verbonden met GND/Vdd) voor ICSP te werken.
Ook is belangrijk om een juiste reset circuit om de pincode van de Picssoftware. Dit is zeer belangrijk, dus het ICSP programma de microcontroller herstellen kunt, voorafgaand aan het doen zijn programmering.
Zie de belangrijkste figuur in deze sectie. Het toont de Picssoftware pin verbonden met Vss via een pullup weerstand en een diode. De pullup is nodig, omdat voor ICSP om te werken u echt de Picssoftware die is geconfigureerd als een resetpin, eerder dan een invoer pin (meer hierover later moet). De diode wordt voorkomen dat de Vpp-spanning van de ICSP programmeur die kan rond 13V beschadigen van de rest van het circuit.
De afbeelding toont ook de aansluitingen voor Vdd en AVdd met elkaar verbonden zijn wat betreft de GND/AVss.
Verwijzen naar de Eagle schematische bestanden voor volledige schema (of in de volgende sectie), maar let op de kleine 'X' vormige symbolen in het hoofdbeeld. Dit zijn de SMD pads, er zijn geen connectors in dit apparaat dus SMD pads worden gebruikt om te solderen stroomaansluitingen en de ICSP verbinding. De ICSP pinnen zijn gerangschikt op het bord op een locatie vlakbij. Korte lengtes van draad sluit aan op een 10pin IDC header (vrij standaard voor ICSP programmeurs). De sub-foto toont deze regeling.
Ze worden ook gebruikt om te solderen in de horloge-kristal. In de 16F88 zijn de PGD en PGC pinnen ook de T1OSO en T1OSI pinnen die worden gebruikt voor een externe kristal verbinden met de PIC T1-oscillator te maken van een real timerklok. Gelukkig kunt u ook gebruiken dit tijdens het programmeren via ICSP alsook... als je voorzichtig bent.
Als de oscillator gaat wanneer de programmeur ICSP probeert te gebruiken van de pinnen, gaat de programmeur ICSP ondervindt. U moet een vertraging toevoegen aan het begin van uw programma. Het codefragment hieronder toont dit in actie. Opmerking dat ik ben ook het uitschakelen van de externe oscillator zo spoedig mogelijk na het opstarten gewoon voor goede maatregel:
void main()
{
unsigned char i;
niet-ondertekende korte nDelay;
T1CON = 0; uitschakelen van timer1 zodra we opnieuw instellen
osccon = 0x76; voor interne 8MHz klok instellen
terwijl ((osccon & 0x04) == 0); en wacht tot de klok te regelen en klaar
Setup randapparatuur
Porta = 0;
portb = 0;
cmcon = 0x07; uitschakelen van de uitgang van comperator, doen nu om trisa correct
trisa = 0xff; Helemaal klaar om in te voeren bij het opstarten
trisb = 0xff; alle pinnen in portb ingesteld op de ingang
Ansel = 0x00; geen analoge in deze cct... belangrijke stap vaak vergeten, ik deed!
delay_s(2); programmeur tijd om dingen te doen te geven... ZEER BELANGRIJK
Tot slot in het hoofdbeeld nota het symbool SMJ100 die wordt overbrugd in het bovenste linker bovenhoek genaamd SJ100. Dit moest worden gebruikt in een noodsituatie, indien ik geprogrammeerd per ongeluk in een configuratie die de Picssoftware pin uitgeschakeld en kon niet stoppen met de vulling van de pinnen ICSP PGD/PGC horloge-oscillator. Dit is een ander handly Eaglecad bibliotheek deel, een eenvoudige link met SMD. Door het overbruggen van het op mijn bord is een eenvoudig plek om te unbridge indien nodig. Dit zou in de bovenstaande situatie noodzakelijk. Normaal sluit u alleen de Picssoftware pin (de chip te resetten), de GND pin (voor verwijzing) en de pinnen van de PGD/PGC te gebruiken ICSP. In de praktijk de programmeur herstelt de chip, magische besturingsseinen verzenden met de processor via PGD/PGC en ertoe brengen om te worden ontvankelijk voor sommige gegevens van het nieuwe Lovin '.
Echter als de processor is bezig om andere dingen te doen en niet gaat om te reageren op een reset, moet u yank zijn macht spoor om haar aandacht te krijgen. In dit geval moet de Vdd pin van de ICSP programmeur worden aangesloten op het circuit. Ik zou snijden van de brug, sluit een draad aan op de Vdd SMD pad (de kleine 'X' symbool in de buurt) en de processor nieuwe instructies geven. Uiteindelijk toen ik het downloadde dodgy code, ik enkel aangedreven van het gemeenschappelijk douanetarief van de programmeur zonder gebruik te maken van dit systeem. Als u had een meer complexe of macht hongerige circuit u één of andere manier loskoppelen de processor van het circuit macht spoor en die aansluiten op de Vdd pin op uw programmeur.
Dus in samenvatting te doen succesvol ICSP onthouden:
-opstelling van een juiste reset circuit met bescherming diode en pullup weerstand
-AVdd/AVss verbinden met de macht rails, als u ze niet gebruikt (en de chip ze, alleen voor 20pin 16F88... niet voor andere versies heeft).
-in uw lay-out, zetten de ICSP verbindingen ergens zinvol en makkelijk te krijgen op.
-hebben een manier van het isoleren van de processorkracht van de macht van het gemeenschappelijk douanetarief en het aansluiten van ICSP Vdd voor noodgevallen
-vermijden van noodsituaties door ervoor te zorgen dat de pinnen van de PGD/PGC zo spoedig mogelijk na een reset klaar voor gebruik zijn.