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 : |
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: 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 ? 1. Weź dwa ledy z rezystorami. Podłącz tak: 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 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. 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: 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ą. |
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: 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/ |