Innehållsförteckning:
- Steg 1: Bygga fristående Arduino
- Steg 2: ISP Wiring
- Steg 3: Redigera Bootloader -filen, Bränn Bootloader och ladda upp din skiss
- Steg 4: Seriell kommunikation
Video: Fristående Arduino 3.3V W / extern 8 MHz klocka programmeras från Arduino Uno via ICSP / ISP (med seriell övervakning!): 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:40
Mål:
- För att bygga en fristående Arduino som körs på 3.3V från en 8 MHz extern klocka.
-
För att programmera den via ISP (även känd som ICSP, seriell programmering i krets) från en Arduino Uno (kör på 5V)
För att redigera bootloader -filen och bränna bootloader (via ISP)
-
För att kunna läsa serieinformation från den fristående Arduino via FTDI -kabel
För att kunna läsa serieinformation från den fristående Arduino utan FTDI -kabeln
Inledning:
Jag försökte bygga mitt fristående projekt men såg inga heltäckande guider för att köra, programmera och övervaka en fristående Arduino - särskilt en som kör en 8Mhz extern klocka och 3,3V och programmerad av en Arduino UNO. Jag har sammanställt ett antal separata guider och jag har försökt referera varifrån jag fick informationen för att ge kredit där kredit beror. Den här guiden är resultatet av att många dagar letat efter lösningar och hittat delar av det samtidigt som jag byggde mitt eget projekt. Jag har också länkat flera användbara produkter som skulle komma till hands inte för att jag är ansluten till någon av företagen, men för att det är relevant att inkludera de specifika poster som jag syftar på.
Vanliga frågor innan vi börjar:
Varför behöver du programmera den med ISP och övervaka via FTDI? Varför kan du inte bara programmera det via FTDI?
Vi måste ändra säkringsinställningarna genom att bränna in en ny bootloader och du kan inte göra det via seriell kommunikation. Du måste bränna startladdaren via ISP. Detta är också användbart för dem som inte har ett förladdat ATMEGA328-chip.
Varför använder jag inte bara en ISP -kabel med seriell övervakning, som den här?
Kanske, precis som jag, råkar du bara ha en och snarare än att vänta på att en ska skickas, gillar du att använda det du har! Jag råkar ha en FTDI -kabel (även om du kommer att upptäcka att du inte ens behöver det: det gör ditt liv enklare).
Behöver jag inte en logisk nivåväxlare från Uno till fristående Arduino?
Ja, det gör du, men jag visar dig hur du gör en själv. Precis som ISP -kabeln råkar jag inte ha en.
Jag vill köra bort den från extern ström. Hur gör jag det?
Det finns gott om guider som visar hur man kör en fristående Arduino från batteriströmmen. Jag kommer att skriva hur jag gjorde det och länka det här [kommer att infoga senare].
GUIDEN
Steg 1: Bygga fristående Arduino
1) Bygg den fristående Arduino från denna länk. Den enda delen av guiden du behöver är "ATMEGA8/168/328 Basics".
- du kan driva den fristående Arduino från 3.3V från Arduino Uno. (Du kan hoppa över det första avsnittet i självstudien med titeln "Lägga till krets för en strömförsörjning."
- Ersätt 16 MHz -klockan med en 8 Mhz -klocka.
-
Lägg till 0,1 uF -lock mellan: VCC och Gnd (båda sidor) VRef och Gnd.
- Jag har inte dessa med på bilden men jag har dem i mina projekt!
- Jag vet att det är en 16 MHz oscillator på fotot. Jag tog fotot innan jag kom på allt jag gjorde i guiden!
ATMEGA328p pinout bildkälla här.
Vanliga felsökningstips
- Se till att du har återställt högt via ett 10k -motstånd från VCC till stift 1 på ATMEGA. Om stiftet är jordat eller flytande fungerar det inte.
- Dubbelkolla att du har satt in ledningar och oscillatorn korrekt.
- Se till att du använder 22pF kondensatorer för 8 MHz oscillatorn. Det fungerar inte annars.
- Se till att enheten är strömförsörjd.
Steg 2: ISP Wiring
2) Skapa ISP -delen
Du kommer att följa den här guiden här med ett litet men mycket viktigt steg.
Anledningen till att du inte bara kan följa guiden är att du saknar en avgörande del: du kan inte programmera en 3.3V -enhet direkt från 5V -anslutningarna. (Åtminstone kunde jag inte: det skulle inte fungera förrän jag gjorde det här). Du måste infoga en logisk nivåväxel som flyttar 5V -signalerna från UNO till 3.3Vstandalone Arduino.
Om du inte har en logisk nivåskiftbräda kan du göra en med hjälp av motstånd. Allt en logisk nivåväxlare verkligen är (så länge du växlar ner) är en spänningsdelare. Du behöver 6 av samma motstånd, inget för högt eller för lågt. Jag använde 220 ohm motstånd, men jag är säker på att även 10k motstånd skulle fungera.
För SCK (digital pin 13) och MOSI (digital pin 11), använd en spänningsdelare för att minska spänningen med en tredjedel. I huvudsak kommer du att ha en Uno SCK och MOSI, sedan ett motstånd (220 ohm), sedan SCK och MOSI anslutet till den fristående Arduino och 2 motstånd (totalt 440 ohm) till marken.
Så läs guiden länkad i början av detta avsnitt, men inkludera spänningsdelare mellan SCK och MOSI. Kom ihåg, SCK, MISO, MOSI och RESET är stift 13, 12, 11 och 10 på Uno men är stift 19, 18, 17 och 1 på den fristående Arduino!
Vanliga felsökningstips
-
KONTROLLERA KABLINGEN
- Om du får en enhetssignatur på alla 0: orna när du försöker skriva program, är din ledning nästan helt avstängd, eller så får den fristående Arduino inte ström.
- Se också till att du har återställningskabeln från 10 på Uno till 1 på den fristående Arduino
- KONTROLLERA SPÄNNINGSDELARNA
Se till att du har spänningsdelare med förhållandet 1: 2 (hög sida: låg sida) för motstånden för både SCK och MOSI. T.ex. ett 220 -motstånd på +5v -sidan och sedan 2 220 ohm -motstånd (totalt 440 ohm) mot marken med signalen mot den fristående Arduino i mitten
Steg 3: Redigera Bootloader -filen, Bränn Bootloader och ladda upp din skiss
3) Redigera bootloader (boards.txt) -filen och bränn bootloader till den fristående Arduino. Ladda upp din skiss
Redigera bootloader -filen
För att få den fristående Arduino att köra måste du redigera inställningarna för brunnsäkring av startladdaren. Annars kommer du att kunna bränna en bootloader på den men kan inte köra några skisser.
Du kan ta bort brownout -upptäckten helt, men jag skulle inte rekommendera det. Istället ska vi sänka det från 2,7V (det som kom på mitt chip som standard) och ersätta det med 1,8V. I slutändan kan du dock välja vilka brownout -inställningar du vill ha genom att använda säkringskalkylatorn här.
Min styrelsefil fanns på följande plats:
C: / Program Files (x86) Arduino / hardware / arduino / avr
Du kan dock ha mer än en boards.txt -fil i din maskinvarumapp annan än /arudino /. Du kommer att redigera boards.txt -filen i / arduino / platsen eftersom du kommer att ändra avsnittet ATMEGA328p (3.3V, 8 MHz).
Du kan förlora den redigerade boards.txt -filen om du installerar om eller uppdaterar Arduino IDE (enligt detta inlägg). Det betyder att om du uppdaterar Arduino IDE måste du ändra dessa inställningar igen om du vill skapa en annan av samma fristående Arduino.
I boards.txt -filen, rulla nedåt eller sök efter "Pro Mini". Avsnittet har titeln "pro.name = Arduino Pro eller Pro Mini". Rulla ner till undersektionen "pro.meny.cpu.8MHzatmega328 = ATmega328P (3.3V, 8 MHz)".
Leta efter raden som säger "pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses = _"
Ändra inställningarna till xFE. (pro.meny.cpu.8MHzatmega328.bootloader.extended_fuses = 0xFE).
Spara och avsluta.
Burning the Bootloader
När du har gjort detta kan du följa avsnittet "Instruktioner" i ISP -guiden från steg 1 till 5.
Några saker att förtydliga:
-
När du laddar upp skissen "Arduino som internetleverantör" måste du se till att du har rätt COM -port och processor vald.
I det här fallet betyder det att du har valt COM-porten på din Arduino i Verktygs-> Port: COM X (Arduino Uno) och kortet är Arduio Uno
-
Välj rätt programmerare: under Verktyg-> Programmerare-> Arduino som Internetleverantör.
INTE ArduinoISP eller ArduinoISP.org
-
Innan du startar bootlodern, byt ut kortet "Pro eller Pro Mini" och processorn till "ATMEGA328p (3.3V, 8 MHz)".
Du ser inte processorsektionen förrän du väljer rätt korttyp
Bränn startladdaren på den fristående Arduino INNAN du försöker skriva skisser på den.
Ladda upp skissen
Det här är väldigt viktigt. Du kan nu programmera antingen Arduino: Uno och Standalone. Om du inte laddar upp till rätt enhet måste du upprepa avsnittet ovan och skriva om Arduino som ISP -program på Uno.
När du laddar upp din skiss, se till att du klickar på Verktyg -> Ladda upp med programmerare ELLER klicka på Ctrl+Skift+U. Du kan också hålla ned skift och klicka på pilikonen, men klicka inte på pilikonen utan att hålla skift.
Vanliga felsökningstips
- Slå på omfattande utdata för felsökning.
-
"Enhetens signatuere är alla 0: or!" [Den här kommer sannolikt att inträffa.]
- se avsnittet ISP Wiring. Antingen har du kopplat den fristående Arduino fel eller så slås den inte på.
- Se till att du har valt rätt COM -port och kort / processor. När du bränner startladdaren MÅSTE du se till att du bränner Pro Mini 3.3V 8 MHz bootloader på den, annars säkras inte korrekt.
-
"Jag har redigerat boards.txt -filen men ser inte redigeringarna"
Se till att du har redigerat rätt boards.txt -fil. Prova att uppdatera Arduino IDE om redigeringarna inte fungerar eller ta bort andra mappar i din / maskinvara / mapp tillfälligt
-
"Jag kan inte hitta pro mini -sektionen av boards.txt!"
Du letar inte i rätt boards.txt -fil. Kontrollera mappen Arduino // hardware/arduino/
Steg 4: Seriell kommunikation
4) Övervaka den fristående enheten via seriell kommunikation
Du kan verkligen göra detta via två metoder, så om du inte ens har en FTDI -kabel / utbrottskort är det inte världens ände. Och kom ihåg att skissen du laddade upp till den fristående Arduino måste ha Serial.print -uttalanden för att du ska kunna läsa: om du inte skrev det i programmet ser du ingenting!
Om du inte har en FTDI -kabel
När du har bränt startladdaren och skrivit det program du vill kan du (mycket noga och komma ihåg vilken riktning det går tillbaka i) ta bort ATMEGA328 DIP -chipet från Arduino Uno. Jag rekommenderar att du använder ett platt huvud för detta.
Du kan ansluta den fristående Arduino RX till Unos RX och TX till TX. Ja, det är normalt tvärtom, men du kan tänka på Uno som att "vidarebefordra" informationen till IDE: s seriella bildskärm. Det är därför du inte ansluter RX till TX och TX ro RX i det här fallet. När du kör ditt program, se till att du har valt Arduino Unos COM -port och öppna seriell montor. Du kommer att kunna se den normala Arduinos serieutgång.
(Denna lösning krediteras Robin2 här.)
Om du har en FTDI -kabel / -kort
(Jag använder Sparkfun's FTDI -kort som jag har konverterat till 3,3V med lödkudden på baksidan)
Anslut helt enkelt utbrottskortets GND till den fristående Arduinos mark och anslut utbrytarens RX till Arduinos TX och TX till RX. (Om du BARA seriell övervakning och inte skriver tillbaka något kan du bara ansluta panelen RX till Arduino TX).
Tänk på att du har möjlighet att driva den fristående Arduino via Uno ELLER FTDI -kabeln. Anslut inte båda strömkällorna samtidigt! Observera att du måste ändra COM -porten eftersom den kommer att vara annorlunda än Arduino Uno COM -porten.
Vanliga felsökningstips
-
"Jag ser ingenting!"
- Kontrollera om du har rätt COM -port aktiverad.
- Kontrollera om du har de senaste FTDI -drivrutinerna.
- SÄKER ATT JORDEN ANSLUTAS.
-
"Allt jag ser är skräputmatning i seriell bildskärm!"
- Du får något som är ett gott tecken.
- Kontrollera dock spänningen på FTDI -kortet.
- Den fristående Arduino matar ut 3.3V på sin TX och FTDI -kortet kanske inte tar upp den om den förväntar sig 5v.
- Kontrollera överföringshastigheten.
- Se till att du har jordanslutning och att endast en strömkälla är ansluten! (Dvs inte driva den fristående Arduino från Uno OCH ditt FTDI -kort.
Rekommenderad:
Hur man gör analog klocka och digital klocka med LED -remsa med Arduino: 3 steg
Hur man gör analog klocka och digital klocka med LED -remsa med Arduino: Idag kommer vi att göra en analog klocka & Digital klocka med Led Strip och MAX7219 Dot -modul med Arduino. Den kommer att korrigera tiden med den lokala tidszonen. Den analoga klockan kan använda en längre LED -remsa, så den kan hängas på väggen för att bli en konstverk
Fristående ATmega328p (med intern 8 MHz klocka): 4 steg
Fristående ATmega328p (med intern 8 MHz klocka): ATmega328p är en en-chip mikrokontroller skapad av Atmel i megaAVR-familjen (senare Microchip Technology förvärvade Atmel 2016). Den har en modifierad Harvard-arkitektur 8-bitars RISCprocessor-kärna. Denna mikrokontroller är hjärnan i Arduino
Läs och skriv från seriell port med hallon Pi med hjälp av Wemos: 5 steg
Läs och skriv från seriell port med Raspberry Pi med Wemos: Kommunicera med en Raspberry Pi med en Wemos D1 mini R2
Skapa en klocka från en klocka: 11 steg (med bilder)
Skapa en klocka från en klocka: I denna instruktionsbok tar jag en befintlig klocka och skapar vad jag tycker är en bättre klocka. Vi går från bilden till vänster till bilden till höger. Innan du börjar på din egen klocka, vänligen vet att återmontering kan vara en utmaning som
Gör en extern hårddisk från gammal extern CD/RW: 5 steg
Skapa en extern hårddisk från gammal extern cd/rw: ganska enkel konvertering av en gammal extern cd/rw till en mer användbar extern hårddisk. Tillbehör1-extern cd/rw (helst den mer boxiga typen) 1-hårddisk (måste matcha internkontakten i enhetsfodralet, måste formateras/syssas) 1-sm