Skillnader i timers, prescalers på Atmega och STM32

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

Skillnader i timers, prescalers på Atmega och STM32

Inlägg av Janson1 »

Hej alla, jag vet inte hur jag skall börja men... En Atmega 328 lär ha tre timers, 2st 8 bitars och en 16 bitars, samtliga med frekvensdelare och jämförelseingångar?
Nästa krets, en STM32F103C har 7 timers varav 3 st 16 bitars med div finesser och allt.
Jag har via Arduino "programmerat" en motorstyrning till dieselmotor (se ECU-styrning till VW pumpdysediesel) med Atmega328 kretsen och den fungerar numera bra, jag har därefter lagt till en pwm utgång och interrupt, allt fungerar ganska bra, mest lite injustering av div konstanter som inte är riktigt klart. Jag hittade sen en STM32F103Cxx modul som stöds av Arduino. Så jag lyckades lägga in mitt ECU-program med pwm utgång och det funkade men sen provade jag även med mitt interruptbaserade ECU-program och det fungerar med MEN det finns en störning typ interferens som ändrar sig med varvtal och belastning (spridarnas öppningstider). En person har hjälpt mig på distans att göra om coden och lägga in den på en STM32 Nucleo F103LRB men återkom att den är för liten, antalet timrar räcker inte utan han valde istället STM32 Nucleo F446 som har upp till 17 timers med extra allt? Min egentliga undran och fråga är: Kan man bara använda en timer en gång per programloop? Eller kan man initiera samma timer flera gånger i en loop och på så sett ha den till lite olika grejer? Är det skillnad i användningen av timrar i Atmega jämfört med STM32? Jag önskar om möjligt ett förståligt svar och jag hoppas jag skrivit en förståelig fråga...
Skall väl ochså tillägga att jag tittar i kretsarnas respektive datablad men jag blir inte speciellt klokare för det... Så tyvärr hjälper dom mig bara lite, ytterst lite.
edit: glömt en bokstav...
Senast redigerad av Janson1 15 augusti 2019, 06:57:05, redigerad totalt 1 gång.
Shimonu
Inlägg: 224
Blev medlem: 21 oktober 2015, 22:44:33

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

Inlägg av Shimonu »

Har bara erfarenhet med Atmega men känner mig säker att det är liknande i andra kretsar. Men timers är inget problems att ställa om och starta med andra inställning när som helst, sen om det fungerar bra med vad man försöker göra kanske inte alltid är sant.
Användarvisningsbild
mrfrenzy
Co Admin
Inlägg: 11325
Blev medlem: 16 april 2006, 17:04:10

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

Inlägg av mrfrenzy »

Den stora fördelen med en timer är ju att ställa in den och sen glömma bort den. Timern jobbar på i bakgrunden utan att belasta din mainloop.

Om du ska sitta och bevaka när en timer blir ledig för att återanvända den så är det risk att låsa in sig i ett ineffektivt hörn.

Det finns en anledning till att Bosch, Siemens etc sätter rejäla 32-bit mikroprocessorer med hundratals I/O i sina ECUer.
Användarvisningsbild
hawkan
Inlägg: 1739
Blev medlem: 14 augusti 2011, 10:27:40

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

Inlägg av hawkan »

Inga problem att använda en timer till olika saker. Sker sakerna seriellt efter varann så är det enkelt.
Sker saker omlott så är det första man får fråga sej i ISRen: vad ska göras nu? Så,man får hålla ordning på det och man får göra sej en scheduler tror jag det kallas. Och ladda om timern. Men folk har funderat på detta förr. Det är inte första gången som antalet timers är lägre än antalet tasks.
Användarvisningsbild
Icecap
Inlägg: 24521
Blev medlem: 10 januari 2005, 14:52:15
Skype: torstenhemma
Ort: Aabenraa, Danmark

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

Inlägg av Icecap »

Behöver man flera timers för att de ska sköta olika jobb är det en fråga om hur exakta i tid som de jobb måste skötas.

Har man t.ex. en funktion som ska utlösas var 133ms och en annan som ska utlösas var 150ms kan man - som exempel - ta en timer som ställs till att ge interrupt varje 1 ms.

I timer-ISR'n tar man sedan en variabel för varje funktion och gör såhär:

Kod: Markera allt

if(Timer_Counter_x)
  {
  Timer_Counter_x--;
  }
else
  {
  Timer_Counter_x = 133; // Antal ms
  Do_The_133_ms_stuff();
  }
Ganska enkelt - men ger lite timingsjitter som man ska ha koll på om det är av betydelse.

Men blir det så att timingsjitter är ett problem ska man analysera noga vad som behövs och hur man uppfyller det. Att ha fler timers som är dedikerat är ingen hjälp, två timers med olika intervall och samma interrupt-prioritet kommer att ge timingsjitter per definition.
ToPNoTCH
Inlägg: 3771
Blev medlem: 21 december 2009, 17:59:48

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

Inlägg av ToPNoTCH »

Här är nog ett typexempel på när man lider av att köra Arduino.

STM32 har väl utvecklade timers och en NVIC som har massa möjligheter.
Man kommer inte åt dessa via STM32duino utan kan enbart använda ordinarie funktioner.

Det är väl så att vissa timers och interrupter används default i Arduino (För millis(), PWM osv.)
Det är ju hyggligt dokumenterat för AVR vad som "är upptaget" men jag hittar inte mycket kring STM32duino.

Om koden funkar med AVR men inte STM32 (trots att den kompilerar) så är min slutsats att porteringen inte är fullt utvecklad.

Själv hade jag nog växlat till C i detta fall. För att få järnkoll på interrupter och timers.
Användarvisningsbild
hawkan
Inlägg: 1739
Blev medlem: 14 augusti 2011, 10:27:40

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

Inlägg av hawkan »

Du menar att gå över till STs utvecklingsmiljö antar jag. Arduino är redan C.
Shimonu
Inlägg: 224
Blev medlem: 21 oktober 2015, 22:44:33

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

Inlägg av Shimonu »

Det brukar väl påstås det men har för mig någon visade att det inte var det. Bara det faktum att man tvingas till setup och loop i Arduino gör väl att det inte är C. Och det är väl något mellansteg från en arduino-sketch tills det faktiskt körs genom gcc.
Användarvisningsbild
AndLi
Inlägg: 10314
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

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

Inlägg av AndLi »

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..
ToPNoTCH
Inlägg: 3771
Blev medlem: 21 december 2009, 17:59:48

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

Inlägg av ToPNoTCH »

Vi kanske borde reda ut det en gång för alla då.

- Kontrollstruktur och Operators i Arduino är C++

- Variabel hantering är 99% lika som C

- Funktioner är till 95% properteriära.
Typ: digitalWrite() , pulseIn() , attachInterrupt() , Serial.print() osv.

Eftersom i stort sett (normalt) alla program använder någon peripheral och åtkomst till dessa i Arduino är via funktioner så är
i praktiken ingen Arduino kod kompilerbar i C, vare sig för AVR som Arduino ursprungligen utvecklades för eller för annat.

Det är väl just att man abstraherat bort konfigurering av hårdvaran som gör att det är ganska lätt att komma igång och koda i det. Samtidigt hämmar det ju lite utvecklingen nu när det kommer mer och mer stöd för andra MCU'r beroende på hur bra man porterar dessa funktioner till ny hårdvara.

När någon community adderar plattformsstöd för Arduino så har dom ju olika filosofi.
Vissa vill inte lägga till nya funktioner som bara funkar för den MCU'n och andra har inte ens alla "bas funktioner" som finns i Arduino referens på plats.

Med detta sagt så vill jag på intet sätt "se ner på" Arduino. Det är säkerligen hundratusentals programmerare som skulle gjort annat om det inte funnits. Det går att göra lika bra program i Arduino som i C och Assembler osv. Men det finns begränsningar i utnyttjandet av hårdvaran.

Jag själv använder det ofta och gärna ihop med Esspressif moduler.
Till STM32 så blir det dock C och gärna i Atollic nu när den blivit gratis dessutom.
Janson1
Inlägg: 915
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

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

Inlägg av Janson1 »

Mycket grejer här som jag inte förstår... Men varför har en STM32 variant 17 timrar? Är dess timrar låsta till specifika I/O:s? Om man använder en timer, kan dess I/O då bli oanvändbar om man använder den internt? Många och kanske konstiga frågor...
Användarvisningsbild
AndLi
Inlägg: 10314
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

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

Inlägg av AndLi »

Nä io kan du då använda till andra saker som är kopplad till den eller som en vanlig IO.

Ja en timer har vissa specefika pinnar den kan ha som in/ut gång.

Ofta är det 3-4 olika varianter av timerar som kan lite olika saker.
Användarvisningsbild
Icecap
Inlägg: 24521
Blev medlem: 10 januari 2005, 14:52:15
Skype: torstenhemma
Ort: Aabenraa, Danmark

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

Inlägg av Icecap »

Min erfarenhet av Renesas RX-serien är att det finns olika typer av timers.

På RX210 finns det t.ex. 4 st som enbart kan ställas till att ge interrupt som alltså kan användas till att utlösa sekvenser i mjukvaran. Dessa kan vara att utföra en regleringsfunktion med stabila mellanrum eller liknande.

Jag använder den typ av timer till att ha den basala time-tick där jag t.ex. läser knappar, utför debounce och liknande.

Det finns sedan två grupper om 6-7 st timers med lite olika egenskaper men i grunden mycket lika, de är till att interface med hårdvaran. Det kan vara 3-fas PWM för BLDC-styring, det kan vara Capture-funktioner (som jag använder en del) osv. De kan oftast "länkas ihop" så att t.ex. 3-fas PWM kan hållas synkroniserat vid att man kan ha en timer till att utlösa en annan timer osv.

Detta sätt går igen i "alla" µC med hårdvara nog.

Såklart har varje timer mest tillgång till vissa portpinnar - och det finns µC där man kan omkonfigurera vilka enheter som sitter till vilken portpinne - och därför ska man planera sitt design noga med datablad i handen.
ToPNoTCH
Inlägg: 3771
Blev medlem: 21 december 2009, 17:59:48

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

Inlägg av ToPNoTCH »

När det gäller planering så får man faktiskt säga att CubeMX är riktigt bra.
Många med mig gillar inte den "automagenererade setupkoden".
Men man kan skita i den och bara använda CubeMX som dokumentationsverktyg.

Efter man valt MCU så assignar man pinnar och grejor som man vill och verktyget har koll på vald MCU
så man kan inte göra fel.

Den har även en otroligt pedagogisk grafisk klock configurator.
Namnlös.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Janson1
Inlägg: 915
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

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

Inlägg av Janson1 »

Alltså, då jag egentligen inte riktigt fattar STM32 (ja kanske inte Atmegan heller) så blir det nog till att skaffa det här CubeMX-programmet och börja (försöka) programmera själv. Jag har 2 st Nucleo-moduler att ha igäl...
Skriv svar