Skillnader i timers, prescalers på Atmega och STM32

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Janson1 »

Nu har jag tittat igenom länkarna och det är mycket matnyttigt men jag kan inte se vilken timer som går till vad. (alla 4 verkar generella?) Jag går helt enkelt bet...
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Janson1 »

Jag fortsatte med Atmegakretsen i NANO-modulen och la in tre st pwm utgångar samtidigt som ECU:n gick och allt verkar fungera ihop. Det blir nog att fortsätta med Arduino och dess IDE-miljö då allting verkar funka...
MattisLind
Inlägg: 738
Blev medlem: 27 maj 2011, 20:27:12
Ort: Älvsjö
Kontakt:

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av MattisLind »

Ursäkta intrånget i tråden, men jag blir så fundersam över de ständiga diskussionerna om Arduino och att det inte skulle var C/C++ så jag kunde inte hålla mig denna gång.
AndLi skrev:
hawkan skrev:Du menar att gå över till STs utvecklingsmiljö antar jag. Arduino är redan C.
Vilken C standard anser du att är?

Det är möjligen en dialekt som måste preprocessas innan du kan ge den till en c kompilator som följer standard..
Att man i ett byggsteg gör en massa saker innan man kör det genom kompilatorn har väl ingenting med vilket språk det rör sig om. Inte dialekt heller. Arduino använder en vanlig GCC. Inga konstigheter.

Här är en länk som beskriver byggprocessen: https://github.com/arduino/Arduino/wiki/Build-Process

Det är inget märkligt med Arduino-miljön. Man kan lägga in sina cpp och h filer som man önskar och den bygger ihop det. Man måste dock ha en ino fil som bas för projektet. Och den har ingen main() eftersom den ligger in i en fil i ramverket. Men det har som sagt inget med språket som sådant att göra. Sedan är det så att en del library-funktioner är lite speciella och har sina ideer om hur saker ska göras vilket kan ge begränsningar. Men det har ju inget med språket att göra.

Att inte kalla det för C++ bara för man inte har en main() i .ino filen håller jag inte med om. Man kan kalla Arduino för ett C++ ramverk.
Mr Andersson
Inlägg: 1394
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Mr Andersson »

Nu är det ju inte enbart att det inte finns någon main(). Översättaren gör även en hel del annat.
T.ex. behöver du inte fördefiniera funktioner. Det är, enligt mig iaf, en förbättring men det bryter mot standarden.

Att säga att det är c++ bara för att gcc används i bakgrunden är inget vidare argument. Den läser ju aldrig de omodifierade filerna.
Om jag skriver kod i pascal och kör det genom en automatisk översättare och kompilerar med gcc, har jag då skrivit c++-kod?

Ordet arduino kan innebära flera olika saker.
Arduinohårdvaran. Kan programmeras med valfritt språk som stödjer processorarkitekturen.
Arduinoramverket. Kan användas av valfri kompilator som kan läsa gcc-bibliotek. (eller någon av alla de tredjepartsportar som finns)
Arduinospråket. Väldigt likt, men är inte, c++. Arduino själva kallar det Arduino Programming Language.
Arduinoplattformen. De tre ovanstående tillsammans.

Det är absolut inget fel att använda arduino-IDE:t. Men det är fel att säga att det är c++. Säg istället att det är likt eller baserat på c++.
Kanske ses som petitesser av somliga, men att följa standarder är viktigt. Annars slutar det med att alla gör sina egna c++-språk och inget fungerar tillsammans.
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Janson1 »

En undran: Har jag någon glädje av Arduino´s C prog eller ej? Kan detta hjälpa mig att komma på dom olika timrars funktion/ickefunktion?
Användarvisningsbild
Icecap
Inlägg: 26105
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Icecap »

Problemet är inte språket! Problemet är att Arduino-användare sällan har bra koll på vad som sker med hårdvaran inuti µC'n och därför sällan använder den "korrekt" och fullt.

Såklart finns det användare som är helt med på exakt hur hårdvaran fungerar och vad som sker "bakom draperiet" - men de är mycket få och jag har aldrig hört om någon - ändå är jag säker på att de finns.

T.ex. medför funktionen systime() (tror jag den heter) att en timer kör med fast 1ms interrupt och uppdaterar en 32-bitars variabel. Detta är en god sak till mycket - men använder en timer man kanske skulle ha till annat om man har ett projekt av en viss dignitet.

Såklart finns det work-around på detta - vilket betyder att miljöns (Arduino) påverkan är negativ på lösningen då man måste ta över funktioner som är inbyggd i miljön. Inte optimalt.

Jag är ganska säker på att det går att hooka en interrupt up och använda det till olika hårdvarafunktioner - men hur många användare gör det i verkligheten?

Nu är "original"-Arduino i grunden inget annat än en lite trött µC med en bootloader i samt en USB-port för ICSP. Den funktion har jag på en Renesas RX210 32-bitars µC också, dock utan att USB-delen sitter fast på kretskortet.

Så det är inget speciellt i det, jag har använd EXAKT samma interface till ICSP till Fujitsu FFMC-16LX och Renesas RX210 och det enda jag behöver på min programmeringsdator är en seriell port, vara sig en inbyggd eller en USB-dongel samt ett litet interface med en MAX232 på.

Det "enda" Arduino-miljön ger är att portpinnar inte kallas vid deras namn (PORTA.B0 eller liknande) men istället översätter dessa till vilken pinnummer det är på kretskortet.

Det finns färdiga funktioner för att säga att en viss pinne är In/Ut/Analog/Digital osv, något man klarar på ett piss-kvart med ett datablad i handen.
Det finns färdiga funktioner för att aktivera A/D-omvandlaren, igen en sak man klarar mycket enkelt själv.

I det hela tagit erbjuds en hel del funktioner som gör att man kan lösa många uppgifter utan att behöva gräva i hårdvaran och utan att förstå hårdvaran.

Men som all annan förtuggad mat blir resultatet blekt och smakslöst. Jag tänker alltid på dessa barnmatsburkar/glas man kan köpa när jag hör om Arduino: blek mat som inte smakar något alls - men barnen kan leva på det, det är bara inget kul.

Sedan kommer fördelen vid Arduino: "alla" kan programmera! Just för att alla funktioner är förtuggade och att det läggs till vissa funktioner per default fungerar miljön enkelt och smidigt - och man behöver inte fatta vad man egentligen jobbar med.

Detta gör instegsnivån lågt och det är bra. Jag använde runt 1,5 år på att laga de rutiner jag behövde till RX210, då har jag å andra sidan ett rikhaltigt bibliotek med samtidig interrupstyrd kommunikation på 5 UART, Capture på 8 kanaler, radiokommunikation, A/D-omvandling som håller koll på om in-spänningen är inom giltiga parameter så att 12V->5V omvandlaren kan köras (vid drift av LED-display), ljussensor-omvandling osv. Timerstyrd 1-Wire® kommunikation med det hela och vad annat jag behövde.

Samtidig är det också vad som är problemet om man vill gå vidare: Arduino har rimligt effektivt klippt banden mellan hårdvaran som den finns i µC'n och programmeringen.

Visst, att tugga sig igenom 1600+ sidor datablad för att lära sig hur tusan man sätter en portpinne rätt är definitivt avskräckande för vilken nybörjare som helst! Kommer man upp i "storlek" på µC behöver man dock göra detta jobb och jag skulle gärna se Arduino erbjuda det utbildningsmaterial som förklarar hur det sker, vilka funktioner som läggs till osv.
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Janson1 »

Jo det är väl lite detta som är problemet, antingen får jag köra vidare med "färdigtuggat" eller får jag sätta mig ner och läsa på utan h*lv*te tills det klarnar... Skall nu ge mig på Nucleo så smått. Får se vad det ger...
Användarvisningsbild
hawkan
Inlägg: 2585
Blev medlem: 14 augusti 2011, 10:27:40

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av hawkan »

Icecap skrev: Samtidig är det också vad som är problemet om man vill gå vidare: Arduino har rimligt effektivt klippt banden mellan hårdvaran som den finns i µC'n och programmeringen.
Detta är inte sant. Arduino erbjuder sin standardmiljö med en del färdiga funktioner, och sin utvecklingsmiljö.
Men i botten är det avr-gcc och ALLT den kan, går att göra i arduino-miljön. Det finns inget hinder att
leka med bittar och register, t ex initiera om en eller alla timers, eller ja precis vad som helst man vill göra.
Här finns inget man har klippt bort, allt från avr-gcc finns tillgängligt. Arduino är inte problemet.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4689
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Swech »

Har man bestämt sig för en åsikt så har man...... :roll:
Hatet mot arduino är lite flyktigt och ändrar sig beroende på de svar som kommer in
nåja, en annan hatade ju Amiga då det begav sig..

Swech
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Janson1 »

Jag funderar vidare, mina problem med 32 bitars processorn och dess timers behöver inte var timerfel bara...
Jag såg på en youtubevideo att man måste deklarera om int till int16_t om man måste ha en specifik längd.
Jag har ju byggt min ECU med int, byte, float med hänsyn till vad jag behöver som mest hela tiden i datavärde.
Jag tror detta kan ställa till problem lite här och var så det blir till att exakt ange vad som skall gälla, och sen testa...
hummel
Inlägg: 2259
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av hummel »

Har du gjort någon design på ditt program i form av flödesschema eller liknande (valfri desigmetod går bra)? Det är alltid en bra start att designa innan man börjar programmera. Sedan testa varje möjlig modul av mjukvaran och verifiera funktionen.
Användarvisningsbild
Icecap
Inlägg: 26105
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Icecap »

Janson1: Om en variabel bör vara av en specifik storlek är det praxis att man just definiera dom till t.ex. uint16_t eller vad man behöver.
Samtidig ska man ha klart för sig att bara för att en variabel bara behöver vara en byte är det inte säkert att man ska ange den som 1 byte...

Exempel: en 32-bitars µC, man behöver en flagga som är antingen SANT eller FALSK. Detta motsvarar rent faktisk 1 bit.
MEN - det rör sig om en funktion som kallas oerhört många gångar och därför ska den vara snabb som tusan.

I "många" 32-bittare kan man bara läsa en 32-bitars variabel in, ska man använda en byte i dom ska det shiftas & maskas bittar - vilket kostar tid. Och då ger det mening att använda en 32-bitars variabel (int eller unsigned int) trots att det räcker med 1 bit.

Är det däremot en variabel som ska kollas "sällan" har lite extra overhead ingen stor betydelse och man kan fint använda bytes eller även bits om man vill.

Men det är mycket viktigt att planera hur man vill lösa problemet som programmet skal lösa som hummel skriver.
Jag använder mycket ofta att skriva rutiner i form av deklarationerna och sedan en text som anger vad rutinen ska lösa.
I toppen av en källkod skriver jag alltid hur det hela är tänkt att jobba och ganska ofta kladdar jag på papper när jag ska börja stycka ihop funktionernas flöde.
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Janson1 »

Från början så hade jag bara Arduinos IDE inställt på UNO/NANO/MEGA, alla 8 bitare och en int där är 16 bitar så när jag "designade" (Är väl att ta i) tänkte ut dess funktioner så utgick jag ifrån hur lång en int är, om jag behöver signed eller unsigned osv. I dessa fall behövdes ju inte vidare eftertanke med att låsa dom till en specifik längd. Men nu behövs det förmodligen.
Sen det här med design och flödesschema, det är jag otroligt dålig på, jag har försökt men det är knappt jag kan tyda det själv efter ett tag. Däremot så skriver jag mycket kommentarer efter i princip varje programmeringsrad, det är mitt sätt att komma ihåg. Jag sitter nu och felsöker på en 32bitars SAMD processor från Atmel och jag tror man måste deklarera en Array på ett annat sätt än vad Arduinos IDE föreskriver? Jag har konstaterat att den delar ut rätt nummer i arrayen men det är bara första som fungerar. Jag behöver nog klistra in filen också?
Användarvisningsbild
Icecap
Inlägg: 26105
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Icecap »

Altså - int är en farlig storlek att använda! Den kan vara allt från en byte till 4 byte! Och till och med mer.
Är det ett värde som kan vara i en byte kan man använda int utan problem men ställer man krav på t.ex. minsta storleken måste man använda andra sätt.
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Janson1 »

Jo men jag får helt enkelt börja skriva exakt vad jag behöver i fortsättningen. Arduinos IDE stödjer detta dessutom.
Nu verkar det inte vara detta fel denna gång, men jag felsöker vidare...
Skriv svar