Síða 1 af 1

C pælingar

Sent: Sun 23. Sep 2012 19:12
af axyne
Er að búa til PWM stýringu fyrir motor með að nota ATMEGA32, forritað í C.
Ég get breytt duty cycle á milli 0-250, en málið er að ég vill ekki alla þessa upplausn heldur bara 0-100 og gerði þennan kóða til að geta kallað í function-ið með 0-100 sem parameter.

Kóði: Velja allt

void setDutyCycle(unsigned char duty){

  if(duty>100){
    duty = 100;
  }

  if(duty>0){
    duty = duty*25/10;
  }

  OCR1A = duty;
}


Kóðinn virkar eftir sem ég veit best en það sem ég er að velda mér uppúr er að parameter-inn fyrir fallið er 8 bita sem ég margfalda síðan með 25, ætti ekki að vera overflow áður en ég deili með 10 ? eða reiknar cpu alla súpuna sem 16 bita áður en útkoman er assign-uð í duty?

Er eitthvað vitlaust að gera þetta svona, er opinn fyrir hugmyndum.

Re: C pælingar

Sent: Sun 23. Sep 2012 19:23
af Garri
Hvers vegna í ósköpunum ertu að nota Char sem inn parameter?

Er þetta php.. þar sem breytur geta verið char eina stundina og int næstu?

Notaðu integer sem breytu og þá virkar þetta þar sem integer er væntanlega 32bita breyta (signed 31 bita) eða 4 byte!

Fer reyndar eftir þýðanda en allir nýlegri þýðendur eru komnir í 32 bita með integer, eldri eru með 16 bita.

Mundi breyta þessu í fall, sirka svona:

Kóði: Velja allt

int Calc_Duty_Cycle (int i_duty)
{
  if (i_duty > 100)
     i_duty = 100;
  if (i_duty > 0)
     i_duty = round(2.55 * i_duty);  // reikna fastlega með að sviðið sé 0..255 en ekki 250 eins og þú reiknar með
  return i_duty;
}

Re: C pælingar

Sent: Sun 23. Sep 2012 19:32
af axyne
Er að forrita í 8 bita microcontroller í C, þar sem int er 16 bita.
Hvort sem ég hef char eða int sem paramter breytir eingu, þetta virkar.

Pælingin er/var afhverju þetta virkar :)

Gerði smá tilraunir áðan og komst að því að reikniaðgerðin (duty*25/10) er 16 bita signed. þannig ég eiginlega búinn að svara sjálfur mér.

edit: sviðið er 0-250 og vildi komast hjá því að nota floating því var búinn að heyra að atmega32 sé hægvirkur varðandi það.

takk samt.

Re: C pælingar

Sent: Fim 22. Nóv 2012 20:39
af starionturbo
langaði að benda á að arduino er í grunninn C en samt ekki 100%, hann notar avr-gcc þýðandann. Þetta er meira byggt á Wiring.

Ég býst við að þú hafir fundið út lausnina við vandamálinu þínu :)