Ska programmera Atmega, behöver begreppsförklaringar

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av sodjan »

Alltså, när man programmerar med en "vanlig" programmerare (som t.ex AVRISP
eller liknande) så är det normala att varje programmering inleds med en
"Erase All". D.v.s att *hela* programminnet, inkl bootloadern!, raderas.
Det är fullständigt normalt.

Om du vill köra med bootloader så använder du bara AVRISP för den initiala
ladningen, d.v.a för att få in bootloader i processorn. All senare programmering
sker via den andra (serie-) kanalen mot bootloadern. Du kan inte använda en
vanlig programmerare igen, utan att också ladda om bootloadern varje gång.

*Om* man använder en vanlig programmerare som t.ex AVRISP så har
bootlodern ingen som helst funktion, den är bara "i vägen", så att säga.

Men OK, jag ville ha det tydligt. Nu *låter* det ju som att det ändå
är ungefär så du försöker göra. Kan du göra "3" flera gånger upprepat
direkt efter varandra utan att gära någonting mellan?

> 5. Jag kör på nytt över ett program från Arduino IDEn mha ovan nämnda USB/rs232-adapter.

Ett program vilket som helst eller samma program som i steg "3" ??

Sen så, som Jesse påpekar, så körs bara bootloadern under ett par sekunder efter
reset av processorn, det är enbart just *då* som du kan köra via USB/RS232 adaptern.
Det framgår inte av din beskrivning vad du faktriskt gör, så det går inte att
säga mer om det.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av jesse »

mattswe skrev:Ok, Så just nu kan jag få både Arduino IDEn och Studio 6 att prata med avrisp mkii men INTE samtidigt. Det verkar inte som att det finns någon lösning för det.
Varför ska de "prata" samtidigt? Du kan väl ändå bara programmera en sak åt gången? Vad är det jag inte förstår?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av sodjan »

Och dessutom behövs det enbart *EN* gång per AVR, d.v.s när bootloadern
ska in initialt. Efter det så kör man ju via bootloadern och behöver inte
AVRISP'en längre... Nej, det är något som är konstigt här... :-)

*Eller* så kör man *inte* bootloader och kör AVRISP hela tiden, och då
får man välja att använda Arduníno IDE'n *eller* Studio.
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av mattswe »

Alltså, när man programmerar med en "vanlig" programmerare (som t.ex AVRISP
eller liknande) så är det normala att varje programmering inleds med en
"Erase All". D.v.s att *hela* programminnet, inkl bootloadern!, raderas.
Det är fullständigt normalt.

Om du vill köra med bootloader så använder du bara AVRISP för den initiala
ladningen, d.v.a för att få in bootloader i processorn. All senare programmering
sker via den andra (serie-) kanalen mot bootloadern. Du kan inte använda en
vanlig programmerare igen, utan att också ladda om bootloadern varje gång.
Detta är jag helt med på.
Kan du göra "3" flera gånger upprepat
direkt efter varandra utan att gära någonting mellan?
Nej, det var precis det jag försökte förklara med steg 5. steg 5 är en repetition av steg 3, samma program med någon mindre modifiering. När jag repeterar steg 3 (5 :wink: ) så får jag felmeddelandet. Om jag då på nytt installerar bootloadern så kan jag köra steg 3 igen, en gång. Jag ska försöka titta i länk-filen på vilken adress bootloadern resp. programmet placeras i mcu:n.
Och dessutom behövs det enbart *EN* gång per AVR, d.v.s när bootloadern
ska in initialt. Efter det så kör man ju via bootloadern och behöver inte
AVRISP'en längre...
Ja, men det är ju precis det som inte fungerar.
Varför ska de "prata" samtidigt? Du kan väl ändå bara programmera en sak åt gången? Vad är det jag inte förstår?
De ska naturligtvis inte "prata" samtidigt. Men det hade varit fint att kunna ha både Arduino IDE och Studio 6 installerade och fungerande på datorn samtidigt. Nu måste jag byta windowsdrivrutin för programmeraren varje gång jag byter program.

Jag håller alltså på att utforska två tillvägagångssätt samtidigt här. Dels utifrån Arduino IDE, dels utifrån Studio 6. Detta pga. att jag i början av den här diskussionen inte var säker på vilken lösning som var bäst. Helst skulle jag bara använda Studio men med Arduino-kod, vilket jag tror är möjligt, jag har ett fungerande Studio-projekt som inkluderar Arduino-corelibbet, och som går igenom kompilatorn. Men om jag ska installera programmet i mcun från Studio (vilket ju måste ske med programmeraren) så finns det ingen större vits med att installera Arduino-bootloadern, eller hur?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av sodjan »

Alltså...

Arduino's primära fördel är just enkelhet.
Det hela fungerar "out-of-the-box".

Vill man inte köra så som Ardunio konstruktörerna har tänkt det,
så vet i fan varför man ska köra Ardunio delar över huvudtaget.

Jag har väldigt svårt att tro att Arduino libbarna är så mycket
bättre än vad som finns tillgängligt till AVR från andra platser.

Dessutom kan du köra vilken AVR som helst, inte bara de som råkar
stödjas från Arduino libbarna.
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av mattswe »

Jag har väldigt svårt att tro att Arduino libbarna är så mycket
bättre än vad som finns tillgängligt till AVR från andra platser.
Kanhända har du rätt. Ska vidga vyerna lite på google.
Fördelen med Arduino-funktionerna var att det tog mig (gammal C++programmerare) ingen tid alls att lära mig funktionsbiblioteket.
Ok, ok, då borde det inte vara så svårt att lära sig programmera direkt i Studio heller, jag fattar.
Fast just nu behöver mitt egentliga projekt, som ligger här på skrivbordet, en mcu och koden till den har jag skrivit i arduino IDE.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av Icecap »

Om libbet är anpassat till någon specifik shield är det väl OK att använda det men samtidig är det en av dessa lösningar som i slutändan kan ge problem. Har man inte källkoden till lib'et kan man inte säkra sig att det är bästa lösningen - men den kan vara snabb och enkel.

Jag ser ingen fördel med Arduinon alls, jag har sedan också en viss erfarenhet med att bygga µc-lösningar. Min första bildator (trippmätare modell värre) byggde jag på ett testkretskort med bara lödöar, det blev MÅNGA ledningar och ja, det tog tid att bygga den. Men jag visste exakt vad som fanns med, jag fick med allt jag behövde och allt fungerade direkt.

Och behöver du specialfunktioner är det bara att skriva dom! Skriv dom i egna filer, då kan man sedan inkludera dom i alla projekt där man behöver dom, något jag använder mycket. Då har jag källkod och väl testade moduler, inte att förakta!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av sodjan »

KISS, kör Arduino IDE och den vanliga kommunikationen.
Eventuellt, om inget annat fungerar, programmera på Arduino
hårdvaran och flytta den programmerade processorn till "driftmiljön".

Har du en fungerade "ren" Arduino miljö ?
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av mattswe »

Har du en fungerade "ren" Arduino miljö ?
Ja, det har jag. En Arduino Nano, det var det de hade hemma när jag skulle handla, så den mcun går inte att flytta. Men i och med att jag nu fick igång programmeraren mot Arduino IDEn så kan jag nog programmera den mcu som jag behöver för mitt projekt från Arduino IDEn.
Sedan, på lite längre sikt, kanske jag får ta mig tid och lära mig Studio på allvar och skrota Arduino...
olof_n
Inlägg: 116
Blev medlem: 23 februari 2011, 21:36:46

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av olof_n »

Jag har tyvärr inte hunnit labba med AVR Studio. Men det går att köra Arduino biblioteken i den.
När jag testade att programmer Attiny85 (utan bootloader) använde jag en Arduino UNO som isp programmerare.
Har testat att lägga in bootloader på Atmega328 och Atmega1284P och det har fungerat bra.

Efter att bootloadern är installerad är det bara att ladda upp koden seriellt.

Egentligen är det väl "Wiring platformen" man vill åt.

Väldigt enkelt att komma igång när man slipper direkt port manipulation och kan använda digitalWrite, digitalRead, analogWrite för PWM m.m.

Sedan förstår jag att om man vant sig med ren "AVR C" är ovan funktioner onödiga (och slöa).
Annars är en stor grej med Arduino dess community. En nybörjare kan ställa hur dumma frågor som helst på arduino.cc/forum och få trevliga svar.
Det finns dessutom otroligt många bra bibliotek och exempel.

Vill man kan är det heller inga problem att skriva "ren" C.

/Olof
Senast redigerad av olof_n 17 oktober 2012, 16:23:05, redigerad totalt 1 gång.
Borre
Inlägg: 4610
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av Borre »

Har du kollat in ArduinoISP?
Det gör det möjligt att använda din Arduino för att programmera tomma kretsar, antingen med bootloader eller med sketcharna direkt. Allt sker med Arduino IDE.
Väldigt lättförstådd guide här:
https://wirejungle.wordpress.com/2010/0 ... h-arduino/

http://arduino.cc/en/Tutorial/ArduinoISP
olof_n
Inlägg: 116
Blev medlem: 23 februari 2011, 21:36:46

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av olof_n »

Det är inte något problem med att det inte sker någon reset automatiskt vid upload?

Har du testat att manuellt göra en reset vid upload?
DVS klicka på upload knappen, vänta tills koden är kompilerad och sedan gör du en manuell reset.

/Olof
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av mattswe »

Har du testat att manuellt göra en reset vid upload?
DVS klicka på upload knappen, vänta tills koden är kompilerad och sedan gör du en manuell reset.
Jag ska testa detta, men man kan ju undra varför det fungerar första gången då.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av sodjan »

Kanske att bootloadern "ser" att det saknas en laddad applikation,
och då inte gör inte anropet till applikationen utan ligger kvar och väntar
på att IDE't ska "höra av sig". Nästa gång ligger bootloadern bara kvar
tills det sker en timeout och applikationen startas istället, och då är
det ingen som svarar då IDE't senare "knackar på"...

Notera också att en Ardunio Uno har speciell logik kopplad mellan
den AVR som sköter USB och själva "Ardunio AVR'en". D.v.s att
då det kommer data via USB så kommer Arduinon automatiskt att
resetas. Denna funktion saknas sannolikt din egen uppkoppling.

Se : http://arduino.cc/en/uploads/Main/Ardui ... ematic.pdf
speciellt kopplingen mellan PD7 på Mega16 och RESET på Mega328...
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av snigelen »

För att hela programminnet rensas (skrivs med 0xFF) när du programmerar bootloadern. Så du har troligen inte lyckats sätta BOOTRST biten i EFUSE.

Så vid reset efter att du programmerat bootloadern kommer inte den att exekveras direkt, utan programmet startar på adress noll. Eftersom det är rensat där, med 0xFF som tolkas som en NOP (kan vi säga, inte helt sant), så kommer den att fortsätta ända till slutet av programminnet där bootloader liger, och den startas altså inderekt.

När du sedan har lagt in ett program med bootloadern så kommer det att börja exekveras vid reset och du når aldrig bootloadern igen. Så sätt BOOTRST biten och rätt storlek på bootloadern i efuse så kommer det att fungera. Enklast är väl att bränna bootloadern från arduino-miljön, så sätts rätt fuses (om du väljer rätt målkrets).
Skriv svar