Inhoudsopgave:

Standalone Arduino 3.3V W / externe 8 MHz klok wordt geprogrammeerd vanaf Arduino Uno via ICSP / ISP (met seriële bewaking!): 4 stappen
Standalone Arduino 3.3V W / externe 8 MHz klok wordt geprogrammeerd vanaf Arduino Uno via ICSP / ISP (met seriële bewaking!): 4 stappen

Video: Standalone Arduino 3.3V W / externe 8 MHz klok wordt geprogrammeerd vanaf Arduino Uno via ICSP / ISP (met seriële bewaking!): 4 stappen

Video: Standalone Arduino 3.3V W / externe 8 MHz klok wordt geprogrammeerd vanaf Arduino Uno via ICSP / ISP (met seriële bewaking!): 4 stappen
Video: How to operate Atmega328P (Arduino) IC on 3.3v? 2024, November
Anonim
Standalone Arduino 3.3V W / externe 8 MHz klok wordt geprogrammeerd vanaf Arduino Uno via ICSP / ISP (met seriële bewaking!)
Standalone Arduino 3.3V W / externe 8 MHz klok wordt geprogrammeerd vanaf Arduino Uno via ICSP / ISP (met seriële bewaking!)
Standalone Arduino 3.3V W / externe 8 MHz klok wordt geprogrammeerd vanaf Arduino Uno via ICSP / ISP (met seriële bewaking!)
Standalone Arduino 3.3V W / externe 8 MHz klok wordt geprogrammeerd vanaf Arduino Uno via ICSP / ISP (met seriële bewaking!)

Doelen:

  • Om een standalone Arduino te bouwen die op 3,3V werkt op een externe klok van 8 MHz.
  • Om het te programmeren via ISP (ook bekend als ICSP, in-circuit serieel programmeren) vanaf een Arduino Uno (draaiend op 5V)

    Om het bootloader-bestand te bewerken en de bootloader te branden (via ISP)

  • Om seriële informatie van de standalone Arduino via FTDI-kabel te kunnen lezen

    Om seriële informatie van de stand-laone Arduino te kunnen lezen zonder de FTDI-kabel

Preambule:

Ik probeerde mijn op zichzelf staande project te bouwen, maar zag geen uitgebreide handleidingen over het runnen, programmeren en bewaken van een zelfstandige Arduino - met name een die op een 8Mhz externe klok en 3,3V liep en werd geprogrammeerd door een Arduino UNO. Ik heb een aantal afzonderlijke handleidingen samengesteld en ik heb geprobeerd te verwijzen naar waar ik de informatie vandaan heb om krediet te geven waar krediet verschuldigd is. Deze gids is het resultaat van vele dagen zoeken naar oplossingen en delen ervan vinden terwijl ik mijn eigen project aan het bouwen was. Ook heb ik verschillende nuttige producten gelinkt die in de hand zouden komen, niet omdat ik aangesloten ben bij een van de bedrijven, maar omdat het relevant is om de specifieke items op te nemen waarnaar ik verwijs.

Veelgestelde vragen voordat we beginnen:

Waarom moet je het programmeren met ISP en monitoren via FTDI? Waarom programmeer je het niet gewoon via FTDI?

We zullen de instellingen van de zekering moeten veranderen door een nieuwe bootloader in te branden en dat kan niet via seriële communicatie. U moet de bootloader branden via ISP. Dit is ook handig voor degenen die geen vooraf opgestarte ATMEGA328-chip hebben.

Waarom gebruik ik niet gewoon een ISP-kabel met seriële bewaking, zoals deze?

Misschien heb je, net als ik, er gewoon geen en in plaats van te wachten tot er een wordt verzonden, gebruik je graag wat je hebt! Ik heb toevallig een FTDI-kabel (hoewel je die uiteindelijk niet eens nodig zult hebben: het maakt je leven alleen maar gemakkelijker).

Heb ik geen logische niveauverschuiver nodig van de Uno naar de zelfstandige Arduino?

Ja, dat doe je, maar ik zal je laten zien hoe je er zelf een kunt maken. Net als de ISP-kabel heb ik er toevallig geen.

Ik wil hem op externe voeding laten werken. Hoe doe ik dat?

Er zijn tal van handleidingen die laten zien hoe u een zelfstandige Arduino op batterijvoeding kunt laten werken. Ik zal schrijven hoe ik het deed en het hier linken [zal later invoegen].

DE GIDS

Stap 1: De zelfstandige Arduino bouwen

De zelfstandige Arduino bouwen
De zelfstandige Arduino bouwen
De zelfstandige Arduino bouwen
De zelfstandige Arduino bouwen

1) Bouw de zelfstandige Arduino via deze link. Het enige deel van de handleiding dat u nodig hebt, is de "ATMEGA8/168/328 Basics".

  • je kunt de stand-alone Arduino van stroom voorzien vanaf de 3.3V uit de Arduino Uno. (Je kunt het eerste deel van de tutorial met de titel "Circuits toevoegen voor een voeding" overslaan.
  • Vervang de 16 MHz klok door een 8 MHz klok.
  • Voeg 0,1 uF caps toe tussen: VCC en Gnd (beide zijden) VRef en Gnd.

    • Ik heb deze niet op de foto, maar ik heb ze wel in mijn projecten!
    • Ik weet dat het een 16 MHz oscillator op de foto is. Ik nam de foto voordat ik alles doorhad wat ik in de gids deed!

ATMEGA328p pinout afbeeldingsbron hier.

Algemene tips voor probleemoplossing

  • Zorg ervoor dat je via een weerstand van 10k van VCC naar pin 1 van de ATMEGA hebt ingesteld op high. Als de pin geaard of zwevend is, werkt deze niet.
  • Controleer nogmaals of u de draden en de oscillator correct hebt geplaatst.
  • Zorg ervoor dat u 22pF-condensatoren gebruikt voor de 8 MHz-oscillator. Het zal anders niet werken.
  • Zorg ervoor dat het apparaat is ingeschakeld.

Stap 2: De ISP-bedrading

De ISP-bedrading
De ISP-bedrading
De ISP-bedrading
De ISP-bedrading

2) Maak het ISP-gedeelte aan

Je volgt deze handleiding hier met een kleine maar zeer belangrijke stap.

De reden dat je de handleiding niet zomaar kunt volgen, is omdat je een cruciaal onderdeel mist: je kunt een 3,3V-apparaat niet rechtstreeks vanuit de 5V-aansluitingen programmeren. (Tenminste, ik kon het niet: het zou niet werken totdat ik dit deed). U moet een logische niveauverschuiver invoegen die de 5V-signalen van de UNO naar de 3.3V standalone Arduino verschuift.

Als u geen logisch niveauverschuivingsbord hebt, kunt u er een maken met behulp van weerstanden. Het enige wat een logische niveauverschuiver echt is (zolang je naar beneden schakelt) is een spanningsdeler. Je hebt 6 dezelfde weerstanden nodig, niets te hoog of te laag. Ik gebruikte 220 ohm weerstanden, maar ik weet zeker dat zelfs 10k weerstanden zouden werken.

Gebruik voor SCK (digitale pin 13) en MOSI (digitale pin 11) een spanningsdeler om de spanning met een derde te verlagen. In wezen heb je één Uno SCK en MOSI, dan een weerstand (220 ohm), dan SCK en MOSI aangesloten op de stand-alone Arduino en 2 weerstanden (440 ohm totaal) op aarde.

Lees dus de gids die aan het begin van dit gedeelte is gekoppeld, maar voeg spanningsdelers toe tussen SCK en MOSI. Onthoud dat SCK, MISO, MOSI en RESET pinnen 13, 12, 11 en 10 op de Uno zijn, maar pinnen 19, 18, 17 en 1 op de zelfstandige Arduino!

Algemene tips voor probleemoplossing

  • CONTROLEER DE BEDRADING!

    • Als je een apparaathandtekening krijgt van alle nullen wanneer je een programma probeert te schrijven, dan is je bedrading vrijwel zeker uitgeschakeld of krijgt de zelfstandige Arduino geen stroom.
    • Zorg er ook voor dat je de reset-draad van 10 op de Uno naar 1 op de zelfstandige Arduino hebt
  • CONTROLEER DE SPANNINGSVERDELERS

    Zorg voor spanningsdelers met een verhouding van 1:2 (hoge kant: lage kant) voor de weerstanden voor zowel SCK als MOSI. bijv. een 220 weerstand aan de +5v kant en dan 2 220 ohm weerstanden (440 ohm totaal) naar aarde met het signaal naar de standalone Arduino in het midden

Stap 3: Bewerk het bootloader-bestand, brand de bootloader en upload je schets

Bewerk het Bootloader-bestand, Brand de Bootloader en Upload Your Sketch
Bewerk het Bootloader-bestand, Brand de Bootloader en Upload Your Sketch
Bewerk het Bootloader-bestand, Brand de Bootloader en Upload Your Sketch
Bewerk het Bootloader-bestand, Brand de Bootloader en Upload Your Sketch

3) Bewerk het bootloader-bestand (boards.txt) en brand de bootloader naar de zelfstandige Arduino. Upload je schets

Het bootloader-bestand bewerken

Om de standalone Arduino aan de praat te krijgen, moet je de instellingen van de brownout-zekering van de bootloader aanpassen. Anders kun je er een bootloader op branden, maar kun je geen schetsen uitvoeren.

Je kunt de brownout-detectie volledig verwijderen, maar ik zou het niet aanraden. In plaats daarvan gaan we het verlagen van 2,7V (wat standaard op mijn chip stond) en vervangen door 1,8V. Uiteindelijk kunt u echter kiezen welke brownout-instellingen u wilt door de zekeringcalculator hier te gebruiken.

Mijn boards-bestand bevond zich op de volgende locatie:

C:\Program Files (x86)\Arduino\hardware\arduino\avr

Het is echter mogelijk dat u meer dan één boards.txt-bestand in uw hardwaremap heeft, behalve /arudino/. Je gaat het boards.txt bestand op de /arduino/ locatie bewerken omdat je de ATMEGA328p (3,3V, 8 MHz) sectie gaat wijzigen.

U kunt het bewerkte bestand boards.txt kwijtraken als u de Arduino IDE opnieuw installeert of bijwerkt (volgens dit bericht). Dit betekent dat als u Arduino IDE bijwerkt, u deze instellingen opnieuw moet wijzigen als u nog een van dezelfde zelfstandige Arduino wilt maken.

Scroll in het bestand boards.txt naar beneden of zoek naar "Pro Mini". De sectie is getiteld "pro.name=Arduino Pro of Pro Mini". Scroll naar beneden naar de subsectie "pro.menu.cpu.8MHzatmega328=ATmega328P (3,3V, 8 MHz)".

Zoek naar de regel met de tekst "pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses=_"

Wijzig de instellingen in xFE. (pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses=0xFE).

Opslaan en afsluiten.

De bootloader branden

Zodra u dit hebt gedaan, kunt u het gedeelte 'Instructies' in de ISP-handleiding volgen van stap 1 tot 5.

Enkele zaken ter verduidelijking:

  • Wanneer u de schets "Arduino als ISP" uploadt, moet u ervoor zorgen dat u de juiste COM-poort en processor hebt geselecteerd.

    In dit geval betekent dit dat je de COM-poort van je Arduino hebt geselecteerd in Tools->Poort: COM X (Arduino Uno) en dat het bord Arduio Uno is

  • Selecteer de juiste programmeur: onder Tools->Programmer->Arduino als ISP.

    NIET ArduinoISP of ArduinoISP.org

  • Voordat u de bootloder gaat branden, moet u het bord "Pro of Pro Mini" en processor wijzigen in "ATMEGA328p (3.3V, 8 MHz)".

    Je ziet het processorgedeelte pas als je het juiste boardtype hebt geselecteerd

Brand de bootloader op de standalone Arduino VOORDAT je probeert er schetsen op te schrijven.

De schets uploaden

Dit is erg belangrijk. U kunt nu beide Arduino programmeren: de Uno en de Standalone. Als u niet naar het juiste apparaat uploadt, moet u het bovenstaande gedeelte herhalen en Arduino herschrijven als ISP-programma op de Uno.

Wanneer u uw schets uploadt, zorg er dan voor dat u klikt op Extra -> Uploaden met programmeur OF klik op Ctrl+Shift+U. U kunt ook shift ingedrukt houden en op het pijlpictogram klikken, maar klik niet op het pijlpictogram zonder shift ingedrukt te houden.

Algemene tips voor probleemoplossing

  • Schakel uitgebreide uitvoer in voor het oplossen van problemen.
  • "De handtekening van het apparaat is allemaal nullen!" [Deze zal zeer waarschijnlijk voorkomen.]

    • zie ISP-bedrading sectie. Of je hebt de standalone Arduino verkeerd aangesloten of hij wordt niet ingeschakeld.
    • Zorg ervoor dat je de juiste COM-poort en bord / processor hebt geselecteerd. Wanneer u de bootloader brandt, MOET u ervoor zorgen dat u de Pro Mini 3.3V 8 MHz bootloader erop brandt, anders worden de zekeringen niet correct ingesteld.
  • "Ik heb het bestand boards.txt bewerkt, maar zie de bewerkingen niet"

    Zorg ervoor dat je het juiste boards.txt-bestand hebt bewerkt. Probeer Arduino IDE bij te werken als de bewerkingen niet werken, of verwijder tijdelijk andere mappen in uw /hardware/-map

  • "Ik kan de pro mini-sectie van boards.txt niet vinden!"

    U zoekt niet in het juiste boards.txt-bestand. Controleer de map Arduino//hardware/arduino/

Stap 4: Seriële communicatie

4) Bewaak het zelfstandige apparaat via seriële communicatie

Je kunt dit echt op 2 manieren doen, dus als je niet eens een FTDI-kabel / breakout-bord hebt, is het niet het einde van de wereld. En onthoud, de schets die je naar de standalone Arduino hebt geüpload, moet Serial.print-instructies hebben die je kunt lezen: als je het niet in het programma hebt geschreven, zul je niets zien!

Als je geen FTDI-kabel hebt

Nadat je de bootloader hebt gebrand en het gewenste programma hebt geschreven, kun je (heel voorzichtig en onthoudend in welke richting het teruggaat) de ATMEGA328 DIP-chip van de Arduino Uno verwijderen. Ik raad aan om hiervoor een platte kop te gebruiken.

Je kunt de standalone Arduino's RX aansluiten op Uno's RX en TX op TX. Ja, het is normaal gesproken het tegenovergestelde, maar je kunt de Uno zien als het "doorsturen" van de informatie naar de seriële monitor van de IDE. Daarom koppel je in dit geval RX niet aan TX en TX ro RX. Wanneer u uw programma uitvoert, zorg er dan voor dat u de COM-poort van de Arduino Uno hebt gekozen en open de seriële monitor. U kunt de seriële uitgang van de standaone Arduino zien.

(Deze oplossing wordt hier aan Robin2 toegeschreven.)

Als je wel een FTDI-kabel / bord hebt

(Ik gebruik het FTDI-bord van Sparkfun dat ik heb geconverteerd naar 3,3V met behulp van het soldeerkussen aan de achterkant)

Sluit eenvoudig de GND van het breakoutboard aan op de stand-alone Arduino-aarde en sluit de RX van het breakoutboard aan op de TX van de Arduino en TX op RX. (Als u ALLEEN seriële monitoring uitvoert en niets terugschrijft, kunt u de RX van de breadoutboard gewoon aansluiten op Arduino TX).

Houd er rekening mee dat je op dit moment de mogelijkheid hebt om de zelfstandige Arduino van stroom te voorzien via de Uno OF de FTDI-kabel. Sluit niet beide stroombronnen tegelijk aan! Houd er rekening mee dat u de COM-poort moet wijzigen, omdat deze anders zal zijn dan de Arduino Uno COM-poort.

Algemene tips voor probleemoplossing

  • "Ik zie niets!"

    • Controleer of u de juiste COM-poort hebt ingeschakeld.
    • Controleer of u de meest recente FTDI-stuurprogramma's hebt.
    • ZORG ERVOOR DAT DE GROND IS AANGESLOTEN.
  • "Alles wat ik zie is afvaluitvoer in de seriële monitor!"

    • Je krijgt iets wat een goed teken is.
    • Controleer echter de spanning van het FTDI-bord.
    • De zelfstandige Arduino voert 3,3V uit op zijn TX en het FTDI-bord pikt het mogelijk niet op als het 5v verwacht.
    • Controleer de baudrate.
    • Zorg ervoor dat u aarde hebt aangesloten en dat er slechts één voedingsbron is aangesloten! (D.w.z. voed de stand-alone Arduino niet van de Uno EN uw FTDI-bord.

Aanbevolen: