Electrokit Buggfix Plus
Aktuellt datum och tid: 15.07 2019-09-20

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 51 inlägg ]  Gå till sida 1, 2, 3, 4  Nästa
Författare Meddelande
InläggPostat: 21.31 2019-08-14 

Blev medlem: 09.06 2016-12-01
Inlägg: 759
Ort: Marks Kommun
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 05.57 2019-08-15, redigerad totalt 1 gång.

Upp
 Profil  
 
InläggPostat: 22.23 2019-08-14 

Blev medlem: 21.44 2015-10-21
Inlägg: 174
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.


Upp
 Profil  
 
InläggPostat: 22.37 2019-08-14 
Co Admin
Användarvisningsbild

Blev medlem: 16.04 2006-04-16
Inlägg: 10193
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.


Upp
 Profil  
 
InläggPostat: 04.10 2019-08-15 
Användarvisningsbild

Blev medlem: 09.27 2011-08-14
Inlägg: 1484
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.


Upp
 Profil  
 
InläggPostat: 06.53 2019-08-15 
Användarvisningsbild

Blev medlem: 14.52 2005-01-10
Inlägg: 24046
Ort: Aabenraa, Danmark
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: [Expandera/Minimera] [Hämta] (Untitled.txt)
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.


Upp
 Profil  
 
InläggPostat: 10.45 2019-08-15 

Blev medlem: 17.59 2009-12-21
Inlägg: 3428
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.


Upp
 Profil  
 
InläggPostat: 11.52 2019-08-15 
Användarvisningsbild

Blev medlem: 09.27 2011-08-14
Inlägg: 1484
Du menar att gå över till STs utvecklingsmiljö antar jag. Arduino är redan C.


Upp
 Profil  
 
InläggPostat: 14.40 2019-08-15 

Blev medlem: 21.44 2015-10-21
Inlägg: 174
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.


Upp
 Profil  
 
InläggPostat: 14.44 2019-08-15 
Användarvisningsbild

Blev medlem: 18.17 2004-02-11
Inlägg: 9295
Ort: Knivsta
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..


Upp
 Profil  
 
InläggPostat: 18.05 2019-08-15 

Blev medlem: 17.59 2009-12-21
Inlägg: 3428
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.


Upp
 Profil  
 
InläggPostat: 20.29 2019-08-15 

Blev medlem: 09.06 2016-12-01
Inlägg: 759
Ort: Marks Kommun
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...


Upp
 Profil  
 
InläggPostat: 21.54 2019-08-15 
Användarvisningsbild

Blev medlem: 18.17 2004-02-11
Inlägg: 9295
Ort: Knivsta
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.


Upp
 Profil  
 
InläggPostat: 06.49 2019-08-16 
Användarvisningsbild

Blev medlem: 14.52 2005-01-10
Inlägg: 24046
Ort: Aabenraa, Danmark
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.


Upp
 Profil  
 
InläggPostat: 22.46 2019-08-16 

Blev medlem: 17.59 2009-12-21
Inlägg: 3428
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.

Bilaga:
Namnlös.png


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
InläggPostat: 08.16 2019-08-17 

Blev medlem: 09.06 2016-12-01
Inlägg: 759
Ort: Marks Kommun
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...


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 51 inlägg ]  Gå till sida 1, 2, 3, 4  Nästa

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 4 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010