 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
linel Član


Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.85 Kraj: prekmurje
|
Objavljeno: Ned Jan 02, 2022 1:58 pm Naslov sporočila: SoftPWM knjižnica - predelava |
|
|
Pozdravljeni!
Želel bi predelati knjižnico SoftPWM tako, da bi mi delovala za mikrokontrolerje ATMEGA16, pa ne znam . 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 |
|
 |
Jaka57 Moderator



Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5819 Aktiv.: 24.57 Kraj: Grosuplje
|
Objavljeno: Ned Jan 02, 2022 2:14 pm Naslov sporočila: |
|
|
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 |
|
 |
linel Član


Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.85 Kraj: prekmurje
|
Objavljeno: Ned Jan 02, 2022 2:36 pm Naslov sporočila: SoftPWM knjižnica - predelava |
|
|
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 |
|
 |
mujo Član


Pridružen-a: Ned 02 Jan 2005 19:24 Prispevkov: 746 Aktiv.: 3.15 Kraj: MB
|
Objavljeno: Ned Jan 02, 2022 11:22 pm Naslov sporočila: |
|
|
Ali imaš v breadbordu tudi kristal (16 MHz)?
Mogoče je v tem težava... |
|
Nazaj na vrh |
|
 |
linel Član


Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.85 Kraj: prekmurje
|
Objavljeno: Pon Jan 03, 2022 9:34 am Naslov sporočila: SoftPWM knjižnica - predelava |
|
|
Imam ja. Kot sem rekel, če naložim program (npr. blink) ki ne uporablja te knjižnice, mikrokontroler deluje. |
|
Nazaj na vrh |
|
 |
Jaka57 Moderator



Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5819 Aktiv.: 24.57 Kraj: Grosuplje
|
Objavljeno: Pon Jan 03, 2022 9:57 am Naslov sporočila: |
|
|
Č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 |
|
 |
linel Član


Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.85 Kraj: prekmurje
|
Objavljeno: Pon Jan 03, 2022 7:50 pm Naslov sporočila: SoftPWM knjižnica - predelava |
|
|
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 |
|
 |
mato1111 Član

Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 617 Aktiv.: 4.07 Kraj: Vrhnika
|
Objavljeno: Pon Feb 21, 2022 8:39 pm Naslov sporočila: |
|
|
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 |
|
 |
linel Član


Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.85 Kraj: prekmurje
|
Objavljeno: Tor Feb 22, 2022 8:21 pm Naslov sporočila: SoftPWM knjižnica - predelava |
|
|
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 |
|
 |
|
|
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
|