www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

SoftPWM knjižnica - predelava

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.85
Kraj: prekmurje

PrispevekObjavljeno: Ned Jan 02, 2022 1:58 pm    Naslov sporočila:  SoftPWM knjižnica - predelava Odgovori s citatom

Pozdravljeni!

Želel bi predelati knjižnico SoftPWM tako, da bi mi delovala za mikrokontrolerje ATMEGA16, pa ne znam Sad . knjižnica je narejena za arduino plošče, ne pa za ostale mikrokontrolerje, ker pa je uporaba preprosta v programu, bi jo želel uporabiti, vendar mi javi napake ko se kompajla. Uspelo mi je nekaj predelati, da napak ob kompajlanju ni več, vendar ne deluje. bral sem tudi datasheet od atmega16, pa mi ni jasno čisto vse.
uporabljam tudi knjižnico mightycore da lahko v arduinu programiram omenjeni mikrokontroler.

kaj moram spremeniti da bo delovalo za mikrokontroler atmega16?

link do knjižnice : SoftPWM knjižnica github

original koda knjižnice:
Koda:
|| @name Software PWM Library support
|| @type Library support
|| @target Atmel AVR 8 Bit
||
|| @version 1.0.1
||
*/

#include <avr/io.h>
#include <avr/interrupt.h>

// allow certain chips to use different timers
#if defined(__AVR_ATmega32U4__)
#define USE_TIMER4_HS // Teensy 2.0 lacks timer2, but has high speed timer4 :-)
#elif defined(__arm__) && defined(TEENSYDUINO)
#define USE_INTERVALTIMER  // Teensy 3.x has special interval timers :-)
#else
#define USE_TIMER2
#endif

// for each timer, these macros define how to actually use it
#if defined(USE_TIMER2)
#define SOFTPWM_TIMER_INTERRUPT    TIMER2_COMPA_vect
#define SOFTPWM_TIMER_SET(val)     (TCNT2 = (val))
#define SOFTPWM_TIMER_INIT(ocr) ({\
  TIFR2 = (1 << TOV2);    /* clear interrupt flag */ \
  TCCR2B = (1 << CS21);   /* start timer (ck/8 prescalar) */ \
  TCCR2A = (1 << WGM21);  /* CTC mode */ \
  OCR2A = (ocr);          /* We want to have at least 30Hz or else it gets choppy */ \
  TIMSK2 = (1 << OCIE2A); /* enable timer2 output compare match interrupt */ \
})
#elif defined(USE_TIMER4_HS)
#define SOFTPWM_TIMER_INTERRUPT    TIMER4_COMPA_vect
#define SOFTPWM_TIMER_SET(val)     (TCNT4 = (val))
#define SOFTPWM_TIMER_INIT(ocr) ({\
  TCCR4A = 0; \
  TCCR4B = 0x04; /* CTC Mode */\
  TCCR4C = 0; \
  TCCR4D  = 0; \
  TCCR4E  = 0; \
  OCR4C  = 0; \
  OCR4C  = (ocr); \
  TIMSK4  = (1 << OCIE4A); \
})
#elif defined(USE_INTERVALTIMER)
#define SOFTPWM_TIMER_INTERRUPT    softpwm_interval_timer
#ifdef ISR
#undef ISR
#endif
#define ISR(f) void f(void)
#define SOFTPWM_TIMER_SET(val)
#define SOFTPWM_TIMER_INIT(ocr) ({\
  IntervalTimer *t = new IntervalTimer(); \
  t->begin(softpwm_interval_timer, 1000000.0 / (float)(SOFTPWM_FREQ * 256)); \
})
#endif


moja predelana nedelujoča koda knjižnice:
Koda:
|| @name Software PWM Library support
|| @type Library support
|| @target Atmel AVR 8 Bit
||
|| @version 1.0.1
||
*/

#include <avr/io.h>
#include <avr/interrupt.h>

// allow certain chips to use different timers

#define USE_TIMER2


// for each timer, these macros define how to actually use it
#if defined(USE_TIMER2)
#define SOFTPWM_TIMER_INTERRUPT    TIMER2_COMPA_vect
#define SOFTPWM_TIMER_SET(val)     (TCNT2 = (val))
#define SOFTPWM_TIMER_INIT(ocr) ({\
  TIFR = (1 << TOV2);    /* clear interrupt flag */ \
  TCCR1B = (1 << CS21);   /* start timer (ck/8 prescalar) */ \
  TCCR1A = (1 << WGM21);  /* CTC mode */ \
  OCR2 = (ocr);          /* We want to have at least 30Hz or else it gets choppy */ \
  TIMSK = (1 << OCIE1A); /* enable timer2 output compare match interrupt */ \
})
#elif defined(USE_TIMER4_HS)
#define SOFTPWM_TIMER_INTERRUPT    TIMER4_COMPA_vect
#define SOFTPWM_TIMER_SET(val)     (TCNT4 = (val))
#define SOFTPWM_TIMER_INIT(ocr) ({\
  TCCR4A = 0; \
  TCCR4B = 0x04; /* CTC Mode */\
  TCCR4C = 0; \
  TCCR4D  = 0; \
  TCCR4E  = 0; \
  OCR4C  = 0; \
  OCR4C  = (ocr); \
  TIMSK  = (1 << OCIE4A); \
})
#elif defined(USE_INTERVALTIMER)
#define SOFTPWM_TIMER_INTERRUPT    softpwm_interval_timer
#ifdef ISR
#undef ISR
#endif
#define ISR(f) void f(void)
#define SOFTPWM_TIMER_SET(val)
#define SOFTPWM_TIMER_INIT(ocr) ({\
  IntervalTimer *t = new IntervalTimer(); \
  t->begin(softpwm_interval_timer, 1000000.0 / (float)(SOFTPWM_FREQ * 256)); \
})
#endif

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5819
Aktiv.: 24.57
Kraj: Grosuplje

PrispevekObjavljeno: Ned Jan 02, 2022 2:14 pm    Naslov sporočila:   Odgovori s citatom

Ne vem sicer, kaj je za tebe Arduino plošča,
vendar je lahko Arduino plošča tudi z AtMego16 kontrolerjem!
Z Googlom išči "atmega16 Arduino".

_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.85
Kraj: prekmurje

PrispevekObjavljeno: Ned Jan 02, 2022 2:36 pm    Naslov sporočila:  SoftPWM knjižnica - predelava Odgovori s citatom

Sam sem probal original softPWM knjižnico na Arduino uno plošči in deluje, ko pa ta isti program naložim na atmego16 ki jo imam dano v breadboard pa ne. Povezano je ok, ker če naložim npr. program blink na mego 16 deluje.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mujo
Član
Član



Pridružen-a: Ned 02 Jan 2005 19:24
Prispevkov: 746
Aktiv.: 3.15
Kraj: MB

PrispevekObjavljeno: Ned Jan 02, 2022 11:22 pm    Naslov sporočila:   Odgovori s citatom

Ali imaš v breadbordu tudi kristal (16 MHz)?
Mogoče je v tem težava...
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.85
Kraj: prekmurje

PrispevekObjavljeno: Pon Jan 03, 2022 9:34 am    Naslov sporočila:  SoftPWM knjižnica - predelava Odgovori s citatom

Imam ja. Kot sem rekel, če naložim program (npr. blink) ki ne uporablja te knjižnice, mikrokontroler deluje.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5819
Aktiv.: 24.57
Kraj: Grosuplje

PrispevekObjavljeno: Pon Jan 03, 2022 9:57 am    Naslov sporočila:   Odgovori s citatom

Če bi pripel celoten program in ne samo knjižnjice, bi bilo lažje.
Glede na to da uporabljaš mego16, bi lahko iz knjižnice pometapometal še ene par stvari, da bi bila knjižnjica preglednejša.

_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.85
Kraj: prekmurje

PrispevekObjavljeno: Pon Jan 03, 2022 7:50 pm    Naslov sporočila:  SoftPWM knjižnica - predelava Odgovori s citatom

Ko naložim program na uno-ja deluje (knjižnica nepredelana). Za atmego 16 javi original knjižnica napake, zato sem jo predeloval , tako da napak pri kompjlanju ni več, vendar sem naredil nekaj narobe pa nevem kaj. Program ne deluje na megi16.

program ki ga nalagam na uno-ja in na mego16 je pa ta:
Koda:

#include <SoftPWM.h>

void setup()
{
  SoftPWMBegin();
 
  SoftPWMSet(13, 0);

  SoftPWMSetFadeTime(13, 1000, 1000);
}

void loop()
{
  SoftPWMSet(13, 255);
  delay(2000);
  SoftPWMSet(13, 0);
  delay(2000);
}
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mato1111
Član
Član



Pridružen-a: Pet 28 Dec 2012 14:42
Prispevkov: 617
Aktiv.: 4.07
Kraj: Vrhnika

PrispevekObjavljeno: Pon Feb 21, 2022 8:39 pm    Naslov sporočila:   Odgovori s citatom

Predvidevam da imena registrov niso ista pri obeh mikrokrmilnikih moral se bos malo bolj poglobiti v podatkovni list od mega16.

Malo sem firbcen pa me zanima zakaj bi raje vzel mega16? Na arduino je ponavadi mega328p, ki je v vecini pogledov boljsa (vec prostora, 100% arduino kompatibilno,...)
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.85
Kraj: prekmurje

PrispevekObjavljeno: Tor Feb 22, 2022 8:21 pm    Naslov sporočila:  SoftPWM knjižnica - predelava Odgovori s citatom

Zaradi števila I/O, ker mi ostane na koncu samo en pin prost. Sem vzel atmega 1284, je pin compatible, pa še knjižnice ni potrebno predelovat. Slaba stran je pa da je dražji, dobra pa da ma dosti več spomina.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 491 dni


Powered by phpBB © 2001, 2005 phpBB Group