Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 21 lis 2024, o 17:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 54 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 21 cze 2018, o 07:10 
Offline
Użytkownik

Dołączył(a): 31 maja 2018
Posty: 70
Zbananowany użytkownik

Pomógł: 0

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.



Ostatnio edytowano 21 cze 2018, o 09:38 przez Ada57, łącznie edytowano 6 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2018, o 07:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

A jaki ten błąd wyświetla?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2018, o 07:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 mar 2014
Posty: 150
Lokalizacja: Staszów
Pomógł: 12

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 postu otrzymał pochwałę

_________________
Ad augusta per angusta



Ostatnio edytowano 21 cze 2018, o 09:51 przez chi.cygni, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2018, o 07:36 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27309
Lokalizacja: Szczecin
Pomógł: 1041

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

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2018, o 09:01 
Offline
Użytkownik

Dołączył(a): 31 maja 2018
Posty: 70
Zbananowany użytkownik

Pomógł: 0

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



Ostatnio edytowano 21 cze 2018, o 09:29 przez Ada57, łącznie edytowano 3 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2018, o 09:18 
Offline
Użytkownik

Dołączył(a): 13 paź 2015
Posty: 303
Lokalizacja: Rybnik
Pomógł: 10

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2018, o 09:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 mar 2014
Posty: 150
Lokalizacja: Staszów
Pomógł: 12

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 postu otrzymał pochwałę

_________________
Ad augusta per angusta



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2018, o 10:12 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2018, o 11:04 
Offline
Użytkownik

Dołączył(a): 31 maja 2018
Posty: 70
Zbananowany użytkownik

Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2018, o 11:44 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2018, o 11:56 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2018, o 12:22 
Offline
Użytkownik

Dołączył(a): 31 maja 2018
Posty: 70
Zbananowany użytkownik

Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2018, o 12:37 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 07:05 
Offline
Użytkownik

Dołączył(a): 31 maja 2018
Posty: 70
Zbananowany użytkownik

Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 07:15 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 07:19 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27309
Lokalizacja: Szczecin
Pomógł: 1041

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 postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 08:33 
Offline
Użytkownik

Dołączył(a): 31 maja 2018
Posty: 70
Zbananowany użytkownik

Pomógł: 0

"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.



Ostatnio edytowano 25 cze 2018, o 10:00 przez Ada57, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 08:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 09:52 
Offline
Użytkownik

Dołączył(a): 31 maja 2018
Posty: 70
Zbananowany użytkownik

Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 19:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1030
Lokalizacja: Trójmiasto
Pomógł: 189

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 19:51 
Offline
Użytkownik

Dołączył(a): 31 maja 2018
Posty: 70
Zbananowany użytkownik

Pomógł: 0

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/



Ostatnio edytowano 25 cze 2018, o 10:02 przez Ada57, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 19:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1030
Lokalizacja: Trójmiasto
Pomógł: 189

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 20:04 
Offline
Użytkownik

Dołączył(a): 31 maja 2018
Posty: 70
Zbananowany użytkownik

Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 20:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1030
Lokalizacja: Trójmiasto
Pomógł: 189

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 21:32 
Offline
Użytkownik

Dołączył(a): 31 maja 2018
Posty: 70
Zbananowany użytkownik

Pomógł: 0

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



Ostatnio edytowano 22 cze 2018, o 22:45 przez Ada57, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 22:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1030
Lokalizacja: Trójmiasto
Pomógł: 189

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2018, o 22:39 
Offline
Użytkownik

Dołączył(a): 31 maja 2018
Posty: 70
Zbananowany użytkownik

Pomógł: 0

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 ?.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2018, o 10:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1030
Lokalizacja: Trójmiasto
Pomógł: 189

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 postu otrzymał pochwałę


Ostatnio edytowano 23 cze 2018, o 16:57 przez xentis, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2018, o 11:27 
Offline
Użytkownik

Dołączył(a): 31 maja 2018
Posty: 70
Zbananowany użytkownik

Pomógł: 0

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.



Ostatnio edytowano 23 cze 2018, o 17:31 przez Ada57, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2018, o 13:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1030
Lokalizacja: Trójmiasto
Pomógł: 189

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.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 54 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO