ATNEL tech-forum
https://forum.atnel.pl/

Sinus na Atmeg8A
https://forum.atnel.pl/topic20901.html
Strona 1 z 2

Autor:  Ada57 [ 21 cze 2018, o 07:10 ]
Tytuł:  Sinus na Atmeg8A

Witam
Proszę o korekcje niżej zamieszczonego programu.
Chciałam go skompilować programem MkClipse ,ale na 11 linii pokazał błąd,w AVR Studio 5.1 beż pokazuje błąd i nie kompiluje.
11 linia to:float f = 0.5f * (1.0f + sin(2.0f * PI * (mod/(float)len) - PI * 0.5f));
Może są jeszcze inne błędy które uniemożliwiają kompilacje.
Z góry dziękuję za porady.
Pozdrawiam
Adela
oto kod :


Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  Marhef [ 21 cze 2018, o 07:28 ]
Tytuł:  Re: Sinus na Atmeg8A

A jaki ten błąd wyświetla?

Autor:  chi.cygni [ 21 cze 2018, o 07:32 ]
Tytuł:  Re: Sinus na Atmeg8A

Cześć,
Zaraz cię zacny kolega Jaglarz przećwiczy (i słusznie) za to, że kod programu nie jest między odpowiednimi znacznikami i wskaże to:
http://forum.atnel.pl/topic7402.html
Ja nie mam uprawnień do bacika, jako że jeszcze jestem początkujący (w wiedzy).

Co do meritum.
Czy wiersz 11 wskazuje na jakąś iterację, bo po lewej i prawej stronie ta sama zmienna "f"
No wiem też, co to jest "0.5f" czy "2.0f". Czasem nie "0.5*f" itd.

Autor:  mirekk36 [ 21 cze 2018, o 07:36 ]
Tytuł:  Re: Sinus na Atmeg8A

chi.cygni napisał(a):
Zaraz cię zacny kolega Jaglarz przećwiczy (i słusznie) za to, że kod programu nie jest między odpowiednimi znacznikami i wskaże to:
topic7402.html


POTWIERDZAM i proszę o edycję i poprawę formatowania kodu jeśli wątek ma pozostać na forum

Autor:  Ada57 [ 21 cze 2018, o 09:01 ]
Tytuł:  Re: Sinus na Atmeg8A

Witam
Jetem początkująca , pierwszy raz na forum,nie wiem co zrobić, aby dać poprawny format kodu,jak się dowiem to zmienię,próbuję zmienić według wskazówek podanych wyżej,na razie nie wychodzi.
Kod pobrałam z zagranicznej strony ,i dałam do kompilacji ,ale się nie skompilował.
Kompilator wyświetla taki błąd :WARNING --> main.c --> Line: 11,i nie kompiluje.
No udało się się z tym znacznikiem
Adela

Autor:  Tom92 [ 21 cze 2018, o 09:18 ]
Tytuł:  Re: Sinus na Atmeg8A

Kolega chi.cygni wyżej podał linka - wejdź i poczytaj.

A co do kodu to miałem kiedyś problem z funkcją sin() tylko nie pamiętam jaki, ale nie widzę w twoim kodzie dołączonej biblioteki:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jeżeli dalej będzie błąd to nie wiem jak w MkClipse, ale w Eclipsie jeśli masz to spróbuj wejść w:
"Project / Properties / C/C++ Build / Settings / AVR C Linker"
następnie w polu "Command line pattern:" wpisz:
${COMMAND} -lc -lm ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} -lc

Oczywiście skopiuj i zapisz sobie gdzieś w notatniku to co teraz tam masz jakby coś poszło nie tak.
Mi to kiedyś pomogło.

Autor:  chi.cygni [ 21 cze 2018, o 09:48 ]
Tytuł:  Re: Sinus na Atmeg8A

Kolega Mirek, kiedyś tam raczył napisać na swoim blogu coś na temat stosowania liczb float
Jest to tutaj (ustawienia w Eclipse przy kompilacji):
http://mirekk36.blogspot.com/2013/04/eclipse-nie-dziaa-mi-printf-dla-float.html

Może to o to chodzi?

Autor:  krish [ 21 cze 2018, o 10:12 ]
Tytuł:  Re: Sinus na Atmeg8A

To jest kawałek kodu z Arduino, nie będzie się kompilować bezpośrednio w czystym C.
Trzeba użyć IDE Arduino.

Autor:  Ada57 [ 21 cze 2018, o 11:04 ]
Tytuł:  Re: Sinus na Atmeg8A

W sieci znalazłam Eclipse C++ IDE for Arduino, do pobrania,czy przy pomocy tego można skompilować w/w program?,czy jeszcze potrzebna jest płytka Arduio?.
Eclipse nie mam i nie używałam.
Zauważyłam,że MkCKLIPSE którego używam , nie kompiluje niektórych programów które kompiluje AVR Studio 5.1.
A tak się cieszyłam,że znalazłam mały program MkCLIPSE,i będę mogła porzucić wielkie AVR Studio 5.1

https://marketplace.eclipse.org/content ... de-arduino

Autor:  Nefarious19 [ 21 cze 2018, o 11:44 ]
Tytuł:  Re: Sinus na Atmeg8A

Stwórz sobie tabele takiego sinusa na kompie, stablicuj. Używanie float na 8 bitach bez sprżetowego FPU to jest jakaś maskra...

Autor:  krish [ 21 cze 2018, o 11:56 ]
Tytuł:  Re: Sinus na Atmeg8A

Kompiluje, kompilator.
A tak naprawdę zespół programów składających się na tzw. toolchain.
W Eclipse, AVR Studio ( 5.x jest b. przestarzałe), Arduino IDE, MkClipse, toolchain jest taki sam tzn. gcc dla AVR ( w różnych wersjach).
Powyższe programy to "tylko" b. zaawansowane edytory tekstowe.
EClipse zajmie powyżej 1,5GB -uniwersalne środowisko można programować w dziesiątkach języków.
Arduino 500 MB - zwykle tylko programy Arduino ( ale różny sprzęt AVR, ARM-ATmel-a, STM32, ESP itd)
Atmel Studio 1,2GB- tylko AVR, ARM-ATmel-a , ale wbudowany symulator
do tego toolchain AVR Atmela zajmuje ok 150MB,
Są jeszcze inne IDE ( starsze, lub mniej popularne), można też kompilować bez IDE ( make).

Autor:  Ada57 [ 21 cze 2018, o 12:22 ]
Tytuł:  Re: Sinus na Atmeg8A

Dziękuję za odpowiedzi.
Potrzebuję tego sinusa aby migać 2 diodami led ,nie podłączonymi do masy.
Zmiana stanu wysokiego na niski z jednego pinu X na pin Y co 6 sekund.
Zależy mi na dokładnym wypełnieniu duty50% ,bez delay.
Co będzie lepsze ,sinus czy prostokąt do tego celu.

Autor:  Nefarious19 [ 21 cze 2018, o 12:37 ]
Tytuł:  Re: Sinus na Atmeg8A

Cytuj:
Dziękuję za odpowiedzi.
Potrzebuję tego sinusa aby migać 2 diodami led ,nie podłączonymi do masy.
Zmiana stanu wysokiego na niski z jednego pinu X na pin Y co 6 sekund.
Zależy mi na dokładnym wypełnieniu duty50% ,bez delay.
Co będzie lepsze sinus czy prostokąt do tego celu.


matko... to aż sinusa do tego potrzeba :lol: ?

1. Weź dwa ledy z rezystorami. Podłącz tak:
Obrazek

2. Odpal w kodzie timer programowy co będzie tykał co sekunde (na przykłąd może być 1us ale to bez sensu)

3. w obsłudze timera zliczaj do 6 (chyba że masz inną podstawę czasu to wtedy do tylu żeby miec 6 sekund) jakąś zmienną. Jeżeli zmienna osiągnie wartość 6 jeden pin wyzeruj, drugi ustaw czyli z XORuj.

i tyle

------------------------ [ Dodano po: 2 minutach ]

Ada57 napisał(a):
Co będzie lepsze ,sinus czy prostokąt do tego celu.


Już pomijam fakt że na wyjściu procka nie masz żadnego sinusa :P tylko PWM o zmiennym wypełnieniu który też jest prostokątem :) funkcja analogWrite powinna nazywać się PWM_Write czy coś bo jej nazwa jest myląca. Nie mniej na kniektórych platformach arduino rzeczywiście na wyjściu masz analoowy sygnal z DACa

Autor:  Ada57 [ 22 cze 2018, o 07:05 ]
Tytuł:  Re: Sinus na Atmeg8A

Nie jestem na tyle dobra aby napisać kod według informacji Nefarious19.
Migaczy mam kilka,na tranzystorach,scalakach i na Atmega 8,Attiny 13A,są z delay.
Ale chcę się dowiedzieć nauczyć się coś innego.
Jak podają, zmieszczony 1 program jest na Attiny 85.

https://idyl.io/arduino/sine-pulse-led-pwm-trick/

https://github.com/tonyp7/idylio/blob/m ... ve_led.ino

Autor:  Nefarious19 [ 22 cze 2018, o 07:15 ]
Tytuł:  Re: Sinus na Atmeg8A

Dobra, to zacznijmy od taki na jakim hardwarze chcesz to odpalić? Mam na myśli mikrokontroler i jego otoczenie.

Autor:  mirekk36 [ 22 cze 2018, o 07:19 ]
Tytuł:  Re: Sinus na Atmeg8A

Ada57 napisał(a):
Ale chcę się dowiedzieć nauczyć się coś innego.

Dlatego polecam zostawić tricki arduino i strzępy jakichś informacji z internetu a za to zajrzeć do książki (Bluebooka)

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

gdzie krok po kroku można nie tylko nauczyć się programować w języku C ale też dowiedzieć się n/t wielu technik programowania w tym także jak płynnie sterować jasnością DIOD czy też mocą innych odbiorników za pomocą PWM ... i dużo dużo innych

Autor:  Ada57 [ 22 cze 2018, o 08:33 ]
Tytuł:  Re: Sinus na Atmeg8A

"Dobra, to zacznijmy od taki na jakim hardwarze chcesz to odpalić? Mam na myśli mikrokontroler i jego otoczenie."
Na takim jaki się najlepiej nadaje,nie wiem,może Atmega 8A,Attiny 2313A,Attiny 13A,te mikrokontrolery mam.

Autor:  Marhef [ 22 cze 2018, o 08:56 ]
Tytuł:  Re: Sinus na Atmeg8A

A możesz napisać, tylko tak dokładnie, co ten program ma robić? Ile diod, jak podłączone (najlepiej ze schematem), jak mają migać. Na razie podajesz tak szczątkowe informacje, że nawet w mojej szklanej kuli nie widzę tego projektu.

Autor:  Ada57 [ 22 cze 2018, o 09:52 ]
Tytuł:  Re: Sinus na Atmeg8A

To ma być elektrolizer, 2 elektrody, najdokładniejsze do osiągnięcia wypełnienie duty50%,o okresie 120 sekund,stan niski 60 sekund,stan wysoki 60 sekund.
Jak jest mało dokładne 50%,np z delay,to po miesiącu i dalej pojawiają się zanieczyszczenia .
Znalazłam pomocny artykuł o dokładności z millis ,chciałam go przerobić na, Atmega8A,Attiny2313A, Attiny 13A,ale nie wiem jak.

https://forbot.pl/blog/kurs-arduino-ii- ... is-id18418

Autor:  xentis [ 22 cze 2018, o 19:28 ]
Tytuł:  Re: Sinus na Atmeg8A

Procek attiny13A odpada bo nie można do niego podłączyć kwarca - a bez niego można zapomnieć o dokładności czasowej.
Poniżej masz kod który będzie generował przebieg prostokątny o czasie 60s/60s, i bez problemu się skompiluje w MkClipse.
Procesor attiny2313A taktowany z kwarca 8MHz, w fusbitach należy wybrać taktowanie z kwarca i włączyć CKDIV 8 - tak by zegar maksymalnie obniżyć co by mniej trzeba było działać w programie. Ewentualnie można dać wolniejszy kwarc (wtedy trzeba przeliczyć wszystko na nowo) - ja posiadałem najmniejszy 8M więc cały program jest pod niego.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Trochę wyjaśnień odnośnie działania:
Całość opiera się o sprzętowy timer0, skonfigurowany w tryb CTC. Przerwanie jest wywoływane co:
Częstotliwość taktowania wynosi 1MHz pomimo kwarcu 8MHz, ponieważ w fusbitach włączamy CKDIV_8 - czyli sprzętowy dzielnik zegara przez 8. Aby wgrać do procka taktowanego w ten sposób program, należy spowolnić prędkość programatora albo zworką SLOW_SCK, albo programowo ustawić SLOW_SCK, ewentualnie wgrać program przy taktowaniu 8MHz z kwarca a na koniec włączyć CKDIV_8
F_CPU/preskaler/(porównanie+1) = 1000000/64/(124+1) = 125Hz, czyli co 0,008s.
Jako że czasy trwania poszczególnych stanów mają wynosić 60s w przerwaniu umieszczamy licznik programowy który będzie zliczał 60/0,008 = 7500, czyli co każde zliczone 7500 przerwań stan na pinie wyjściowym się zmieni na przeciwny, a licznik wyzerowany.

Autor:  Ada57 [ 22 cze 2018, o 19:51 ]
Tytuł:  Re: Sinus na Atmeg8A

Dziękuję bardzo xentis,które 2 piny są wyjściami.
Znalazłam w sieci kod na Atmega 8,z milis,proszę daj poprawiony kod, aby miał wyjście PB4 i PB5,lub inne 2 dogodne wyjścia,czy PB0 i PB1 może być?chyba nie,aby miał wypełnienie 60 sek. na 60 sekund.

http://www.count-zero.ru/2015/delay/

Autor:  xentis [ 22 cze 2018, o 19:59 ]
Tytuł:  Re: Sinus na Atmeg8A

Ok ale nie do końca rozumiem co masz na myśli 2 piny... Na drugim pinie ma być stan odwrotny do pierwszego?

Autor:  Ada57 [ 22 cze 2018, o 20:04 ]
Tytuł:  Re: Sinus na Atmeg8A

Dokładnie tak, do jakich 2 pinów podłączyć 2 elektrody w Twoim 1 kodzie ?.

Autor:  xentis [ 22 cze 2018, o 20:11 ]
Tytuł:  Re: Sinus na Atmeg8A

W pierwszym kodzie był tylko jeden pin PB0.
Tu masz z dwoma:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Sygnał będzie na pinach PB0 i PB1 (start programu to PB0 wysoki, PB1 niski a później co 60s się będą zmieniać), piny możesz zmieniać sobie w sekcji oznaczonej na górze programu, jedyny warunek to oba muszą należeć do jednego portu.

Autor:  Ada57 [ 22 cze 2018, o 21:32 ]
Tytuł:  Re: Sinus na Atmeg8A

Dziękuje bardzo.
A jak zmieniać wypełnienia w kodzie,np na 70 sekund,itd.
U mnie program się skompilował na MkCLIPSE.

Autor:  xentis [ 22 cze 2018, o 22:08 ]
Tytuł:  Re: Sinus na Atmeg8A

Ale przy tym samym okresie czyli 70s/50s czy 70s/70s?

Autor:  Ada57 [ 22 cze 2018, o 22:39 ]
Tytuł:  Re: Sinus na Atmeg8A

Wypełnienie 50%,np stan niski 70 sek,stan wysoki 70 sekund,zawsze duty 50 %.
W którym miejscu sama będę mogła zmieniać.70/70 ,90/90,itd.
Wgrałam 2 kod do Attiny 2313A,działa !!!!!!!,wielkie dziękuję Xentis.
Kodu nr.2,PB0-PB1,AVR Studio 5.1 skompilował, MkCLIPSE nie skompilował,dlaczego ?,
Jak zrobić aby 2 kod działał na Atmega 8A ?.

Autor:  xentis [ 23 cze 2018, o 10:50 ]
Tytuł:  Re: Sinus na Atmeg8A

Ada57 napisał(a):
Kodu nr.2,PB0-PB1 ,u mnie MkCLIPSE nie skompilował,dlaczego ?
Trudno mi tu coś powiedzieć, musiałbym zobaczyć całą zawartość konsoli z MkClipse po nieudanej kompilacji.
Ada57 napisał(a):
Jak zrobić aby 2 kod działał na Atmega 8A ?.
Wypełnienie 50%,np stan niski 70 sek,stan wysoki 70 sekund .Zawsze duty 50 %.W którym miejscu sama będę mogła zmieniać.70/70 ,90/90,itd.


Tu masz zmieniony kod który będzie działał zarówno na ATtiny2313A jak i Atmega8A. Ten drugi nie posiada fusabitu CKDIV_8, ma również okrojony timer0. Kod tak zmieniłem by przy kompilacji dla ATtiny2313A działał na timerze0, a dla ATmegi8A na timerze2 (timer0 w ATmedze8A nie posiada trybu CTC na którym bazuje kod). Jako że ATmega8A nie ma podziału przez 8, i by kod działał poprawnie na obu tych prockach zupełnie zrezygnowałem z załączania tej opcji w ATtiny2313A tak więc teraz kod jest dla czystego 8MHz z kwarca, BEZ PODZIAŁU PRZEZ 8 (czyli dla ATTiny2313A NIE załączamy fusa CKDIV_8).

Co do zmiany wypełnienia w sekcji konfiguracyjnej umieszczonej na początku kodu dodałem opcję wpisania czasu półokresu w sekundach, po wpisaniu wartości i puszczeniu kompilacji całe obliczenia zrobi preprocesor przed kompilacją.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  Ada57 [ 23 cze 2018, o 11:27 ]
Tytuł:  Re: Sinus na Atmeg8A

Wielkie dzięki.
Czy da się przerobić program z millis na rosyjskiej stronie ,aby działąl na Atmega8A Attiny 2313A,z wyjściem na 2 piny,60/60, 50% duty,i miał millis.A może potrafisz zrobić to lepiej ale z millis.

Autor:  xentis [ 23 cze 2018, o 13:41 ]
Tytuł:  Re: Sinus na Atmeg8A

Tyle że ten kod z rosyjskiej strony nie odmierza dokładnie czasu:
taktowanie 16000000Hz, preskaler 64, licznik zlicza do przepełnienia czyli 256.
Tak więc przerwanie jest wywoływane 16000000/64/256=976,5625 czyli T = 1/f = 1/976,5625 = 0,001024s
Później jest to porównywane ze zmienna period tak by uzyskać 1s tak więc owa sekunda będzie miała w rzeczywistości 1,024s niby niewiele więcej ale już przy okresie 120s jakie potrzebujesz to 1,024 * 120 = 122,88 czyli już prawie 3 s odchyłki.
Jeżeli taka dokładność Ci odpowiada to niewiele trzeba zmieniać ten kod by spełniał twoje założenia:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Sygnał będzie na pinach PB4 i PB5, i powinien się skompilować zarówno dla ATmegi8A jak i ATtiny2313A - tylko kwarc musi być 16MHz.

Nie za bardzo rozumiem czemu się uparłaś na te milis. To że w moim programie nie ma zmiennej tak nazwanej nie oznacza że liczy on mniej dokładnie, a w tym przypadku jest wręcz przeciwnie - kod z rosyjskiej strony zawiera przybliżenia co powoduje odchyłkę w czasie odmierzania, w programie który napisałem ustawienia są tak dobrane, aby nie było żadnych przybliżeń, a dokładność zliczania jest uzależniona tylko od zastosowanego kwarca.
No chyba że potrzebujesz mieć możliwość zejścia z okresem trwania poniżej 1s, ale nic takiego wcześniej nie pisałaś więc się nie rozdrabniałem na milis.

Strona 1 z 2 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/