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



Teraz jest 29 sty 2025, o 01:15


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 36 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 14 sty 2013, o 15:36 

Pomógł: 0

Robię niewielki projekcik dla kolegi z pracy.....

Troszkę namieszałem z inicjacją timerów, bo są trzy w Atmedze8 na której to robię i superdebounce działa trochę tempo ;), tj. blokuje się, jakbym coś pochrzanił, np. zamiast zmienna Moc zmieniać się płynnie przy przytrzymaniu klawisza np. k_up to skacze, tj. rośnie, przerwa, rośnie itd.

Przez to, że musiałem zmienić z timer2 na timer0 obsługę sterowania triaka z projektu Regulatora mocy 230V, mam wrażenie że coś namieszałem......

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


Mam nadzieje, że kod nie jest bardzo niechlujny, robię to z doskoku, a terminy cisną ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2013, o 15:43 
Offline
Moderator
Avatar użytkownika

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

na pewno tu masz jeden BABOL .... zdaje się że gdzieś na forum już pisałem o nim:

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


druga linia kasuje ci tryb CTC i zamienia tryb na zwykły licznik - jak myślisz dlaczego ? ;)

to tak na gorąco

_________________
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: 14 sty 2013, o 15:58 

Pomógł: 0

Na gorąco ;), to chyba w drugiej linijce jest błąd, by preskaler był == 1024 to na jedynki muszą być ustawione CS20, CS21 i CS22, resztę będę rozkminiać wieczorem :). Bo muszę zmykać na serwis :(.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2013, o 16:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Druga linia kasuje Ci zapis pierwszej. Popatrz na operatory.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2013, o 16:34 
Offline
Moderator
Avatar użytkownika

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

nixie napisał(a):
Druga linia kasuje Ci zapis pierwszej. Popatrz na operatory.


Tu masz rezasurmar - bardziej precyzyjnie powiedziane to na co wcześniej wskazywałem ;) ... nie chodzi o wartość prekslaera - w to nawet nie wnikałem.

_________________
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: 14 sty 2013, o 17:17 

Pomógł: 0

Dzięki wielkie, nie czuje tego blusea jeszcze....

Wysłane z mojego XT910 za pomocą Tapatalk



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sty 2013, o 08:12 

Pomógł: 0

mirekk36 napisał(a):
nixie napisał(a):
Druga linia kasuje Ci zapis pierwszej. Popatrz na operatory.


Tu masz rezasurmar - bardziej precyzyjnie powiedziane to na co wcześniej wskazywałem ;) ... nie chodzi o wartość prekslaera - w to nawet nie wnikałem.


Już wiem, brakuje |=

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



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sty 2013, o 09:46 
Offline
Moderator
Avatar użytkownika

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

Tzn ja np w każdej linijce stosuję na wszelki wypadek |=

ale warto wiedzieć i świadomie to stosować, że w pierwszej linijce tego zapisu nie jest on konieczny - może być samo =

dopiero potem potrzeba jest operacja | (OR)

a czy to coś pomogło w problemach jakie opisywałeś ?

_________________
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: 15 sty 2013, o 09:57 

Pomógł: 0

Jeszcze niestety nie miałem czasu :(, bo muszę naprawić parę płyt, gdyż jutro legalizacja wag :).

Jak tylko coś będę wiedział to napiszę.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sty 2013, o 11:16 
Offline
Moderator
Avatar użytkownika

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

To weź pod uwagę że gdy timer nie był ustawiony w tryb CTC tylko w tryb NORMAL to nie obowiązywały czasy, które sobie ustalałeś w argumentach funkcji tylko były one znacznie dłuższe i rozwleczone - więc może to też powodowało jakieś tam zaciachy ze sterowaniem.

_________________
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: 15 sty 2013, o 11:35 

Pomógł: 0

Po poprawkach klawisze zdecydowanie lepiej reagują.... Teraz zostaje mi wyrzeźbienie reszty, no i wzmacniacz do termopary
Dzisiaj przeprowadzę testy empiryczne sterowania triakiem :).

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



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2013, o 14:59 

Pomógł: 0

Po kilku "dniach" znowu zająłem się moim problemem ;).
Przeportowałem obsługę z Atmega32 na Atmega8, czyli musiałem na nowo przepisać inicjację Timerów. Mam z tym problem.
Mógł by ktoś bardziej rozgarnięty niż ja rzucić okiem, czy nie spaprałem inicjacji, szczególnie dotyczącej Timera0 oraz timerów programówych.
Program startuje, ale potem wisi, tj. warunki timerów programowych się nie wykonują.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2013, o 15:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lis 2011
Posty: 534
Lokalizacja: Mierzyn
Pomógł: 9

a tak z ciekawosci czemu zmeniasz procek ? :)

_________________
pozdrawiam
Jachu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2013, o 15:25 

Pomógł: 0

Bo taki muszę użyć w projekcie, tj. taki już jest na płytce. Zresztą do tego starczy w zupełności atmega8. No i mam ich z 10szt w szufladzie, więc miło by było je wykorzystać.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2013, o 15:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lis 2011
Posty: 534
Lokalizacja: Mierzyn
Pomógł: 9

rezasurmar napisał(a):
Bo taki muszę użyć w projekcie, tj. taki już jest na płytce. Zresztą do tego starczy w zupełności atmega8. No i mam ich z 10szt w szufladzie, więc miło by było je wykorzystać.


luzik pytalem z ciekawosci :)
dlatego chce do Atb zamowic u Mirka przejsciowki na inne procki :)

_________________
pozdrawiam
Jachu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2013, o 15:30 

Pomógł: 0

No ja właśnie też po to te przejściówki zamówiłem :D. Mam i na attiny i na atmega8. Bajer, bo można sobie przetestować na ATB bez potrzeby składania od razu prototypu na danym procku.

Brakuje mi jeszcze czegoś na większe procki ;). Ale z tym poradziłem sobie zamawiając platformę Megadunio na Atmedze2560.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2013, o 15:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lis 2011
Posty: 534
Lokalizacja: Mierzyn
Pomógł: 9

a gdzie zamawiales ?

_________________
pozdrawiam
Jachu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2013, o 15:42 

Pomógł: 0

Od gościa z Chorzowa który robił platwormę MegadunioAVT dla Elektroniki Praktyczniej. Byłem u niego po shieldy ETHT + PCB chindunio i PCB Megadunio AVR.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2013, o 15:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lis 2011
Posty: 534
Lokalizacja: Mierzyn
Pomógł: 9

rezasurmar napisał(a):
Od gościa z Chorzowa który robił platwormę MegadunioAVT dla Elektroniki Praktyczniej. Byłem u niego po shieldy ETHT + PCB chindunio i PCB Megadunio AVR.


jak mozesz daj mi namiary na pw :)

_________________
pozdrawiam
Jachu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2013, o 15:52 

Pomógł: 0

A wracając do tematu, coś mnie się zdaje, że namieszałem w przerywaniach albo timerach. Bo nawet jak wywale wszystko z pętli głównej while(1)

zostawię tylko cykliczną zmianę na LCD z 1 na 9 w drugim rzędzie to i tak, przechodzi tylko raz. tj. zapala się 1 i program zawisa.

Pierwsze co zauważyłem to, że źle zainicjowałem timer0, bo zamiast TOIE0 miałem TOIE2 ;), zaraz przeprowadzę testy, czy to już wszystko, czy nadal mój ciemny rozum nie ogarnia ;) czegoś.

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


Przeliczyłem jeszcze raz w/g wzoru
// 8MHz / 1024 / 100Hz = 78,125 => 255 - 78 = 177: czyli ok 10ms



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2013, o 19:56 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Do timera powinieneś wpisywać 256 - 78, a nie 255 - 78. Tutaj jest trochę inaczej niż w trybie CTC. Zauważ, że jak wpiszesz 255 to potrzeba jeszcze 1 tyknięcia timera, aby się przekręcił i wygenerował sygnał przerwania.
W procedurze przerwania również musisz na nowo wpisywać liczbę do timera inaczej będzie liczył od 0, a nie od 178 i następne przerwanie będzie nie za 10ms tylko za 33ms. W tym programie masz duży preskaler (1024) co oznacza, że timer na pewno nie zliczy żadnego impulsu do czasu wpisania nowej wartości i możesz wpisać ją bezpośrednio, gdyby preskaler był ustawiony na 1 lub 8 wtedy do TCNT0 należy wpisywac w taki sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2013, o 21:14 

Pomógł: 0

Dzięki Krauser, na ciebie zawsze można liczyć :D.

Dzisiaj, już mam dość bo przez swoją głupotę uwaliłem 90% portów USB w moim kompie :P.
Przestroga dla innych, zawsze izolujcie TRIAKi podpięte do 230V by czasem nic nie dotkło..........
Poleciał programator STK500v2 (FTDI i atmega8 się usmażyła) no i 7 z 8 portów USB w kompie.

Całę szczęście, że FTDI mam na zapasie, już wymieniłem i zaprogramowałem. Jutro zaprogramuje atmege8 w programatorze AVRdragon, no i zostaje kupić HUBa USB, albo najlepiej kontroler na PCI.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2013, o 14:20 

Pomógł: 0

Timery zmęczyłem ;). Teraz mam problem z "przekręcającą" się wartością pomiaru ADC. Do połowy zakresu jest ok, powyżej zaczyna wywalać ujemne wyniki.

Tu linijka z zwracaniem wyniku pomiaru
return ((((adc*25822UL)/(1024UL*NOOFSAMPLES))*234UL)/100UL)

NOOFSAMPLES = 128 // zbieram 128 próbek
234 to współczynnik wzmocnienia wzmacniacza termopary + przelicznik termopara napięcie

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


Wprowadziłem lekką poprawkę, celem zsumowania offsetu potrzebnego dla termopary, sumując wartość temperatury DS18x20 z temperaturą termopary.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2013, o 15:18 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Funkcja GetTemperature zwraca liczbę dodatnią, a w sprintf masz %d (liczba dziesiętna ze znakiem). Jak wyjdzie z %u ?


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2013, o 15:30 

Pomógł: 0

Działa, jak zwykle masz racje :), sam czytałem biblioteki i opis sprintf, ale po angielsku to jest napisane tak zagmatwanie, że nie potrafiłem zajarzyć jak to ugryść.
Co ciekawe, sprintf jako 3 argument nie przyjmuje uint32_t


PS. Troszkę przez to, że temperaturę termopary mam jako tekst mam utrudnione zadanie, ale stwierdziłem, że do regulacji "grzałki" Wykorzystam to co zwraca funkcja GetTemperature + offset DS1820.

Jeszcze nie bardzo wiem, jak rozpisać algorytm regulacji, no i muszę powalczyć jeszcze z samym programem. Bo wpisanie lekcji Mirka z książki (rozdział o regulowaniu mocy na 230V) nie do końca mi działa. Testowa żarówka migocze, acz regulacja działa. Chwilowo mam regulację z palca tj. od 0 do 100% można regulować ręcznie...... coś musi być nie tak z czasami i mierzeniem przejścia przez zero.

A tak wyglądają przebiegi dla 25%
Obrazek

Dla 50%
Obrazek

Dla 75%
Obrazek

Niebieski to sygnał na optotriaka, seledyn to szpilki z detekcji zera.



Ostatnio edytowano 25 sty 2013, o 08:27 przez rezasurmar, łącznie edytowano 2 razy

Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2013, o 15:42 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

A może dasz przykład. Próbowałeś z %ld ? A tekst można zamienić na liczbę funkcjami z nagłówka stdlib.h atoi lub atol.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2013, o 08:12 

Pomógł: 0

%ld to long double ? ;). Spróbuję w weekend bo zapomniałem do pracy zabrać mojego symulatora termopary ;).

Dzisiaj muszę zawalczyć z stworzeniem algorytmu do regulacji, jakiś prosty z stałym offsetem powinien starczyć.
Pewnie dla doświadczonego programisty to 10 minut ;).

PS nie wiem czy widać na filmie, ale światło pulsuje, a przerzuciłem 1:1 program Mirka, nie wiem, czy coś źle nie robię. Muszę jeszcze przeanalizować, czy aby nie ma jakieś dużej różnicy między ustawieniem int0 w Atmedze32, a atmega8 której używam.



Na filmie tego nie widać, jednak aż tak dobrze. Przy ustawieniu 100kroków efekt migotania jest mniejszy, przy 200krokach większy.
Co prawda to będzie sterować grzałką, ale nie chciał bym zostawiać tak tego.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2013, o 10:45 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

rezasurmar napisał(a):
%ld to long double ? ;)

Nie. %ld to jest long int => int32_t, a %lu to long unsigned int => uint32_t
Najlepiej w tym celu zajrzyj tutaj http://pl.wikibooks.org/wiki/C/printf. Jest ładniej opisane niż to http://nongnu.org/avr-libc/user-manual/ ... stdio.html z tym, że dla AVR short int to to samo co int.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2013, o 12:51 

Pomógł: 0

Zastanawia mnie jedno, Mirek dokładnie opisuje w książce jakich elementów użyć by szerokość impulsu wynosiła 2ms, u mnie są "identyczne" tj. 68K/3W 33K/0.125W + PC814 no i impuls chcąc nie chcąc ma 0,750ms schemat dokładnie taki jak w książce. Następnie wchodzi to na INT0.

Już chyba wiem. Zależy w którym miejscu mierzymy impuls, z racji jego kształtu oraz tego że oscyloskop w trybie automatycznym mierzy impuls w 10% i 90% jego wysokości.
Pytanie do Mirka jak ma być zmierzony impuls. Bo gdy robię pomiar w 10% wysokości to impuls ma 1.02ms

Obrazek
Obrazek

Niestety obawiam się, że te migotanie jest winą, że źle używam timerów programowych i procesor po prostu nie wyrabia....... zmieniłem szerokość impulsu na 1ms, ale bez zmian.

W zasadzie, program działa. tj. spełnia założenia regulacji ustawiamy klawiszami góra dół temperaturę od 1-600C, a grzałka na triaku załatwia resztę.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Co prawda nie jestem zadowolony z "skomplikowanego" algorytmu regulacji tj.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Brakuje mi jakiegoś "miększego" sposobu regulacji. Ale o pid kolega nie chce słyszeć, bo by musiał się potem z tego tłumaczyć ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lut 2013, o 15:47 

Pomógł: 0

Z racji iż apetyt rośnie w miarę jedzenia, okazało się, iż w projekcie ma być jeszcze regulator P (chyba zrobię PID od razu) dodatkowo wywaliłem te bzdurne pritfy, które na dzień dobry zabierały 2K Flasha. Do tego jeszcze wysyłanie po UART wyników, no i możliwość ręcznego wprowadzanie zmiennych Kp i Kd, jak również błędu wzmacniacza oraz innych parametrów.....
Chwilowo bez PID i wprowadzania danych wygląda to tak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zajmuje 4538 bajtów Flash
i 146 bajtów RAM, więc jest jeszcze sporo miejsca w Atmedze8..........

Jestem w szoku ile dzięki takim Mykom jakie pokazuje Mirek w książce można upchnąć w takich małych procesorach.
90% bibliotek na necie to strasznie tłuste biblioteki........ by zamienić pomiar z ADC, przez konwersję na prinft straciłem na dzień dobry 2K Flasha...... szok. A wystarczył myk z przeliczaniem na 16 i 32 bitowej zmiennej z mnożeniem i %100, cyk i 2K kodu mniej ;).



Góra
  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 36 ]  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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO