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



Teraz jest 1 gru 2024, o 11:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 33 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 3 sty 2014, o 19:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

Witam, jako młody student potrzebuję małego wsparcia przy tworzeniu programu do sterowania obciążeniem małej turbiny wiatrowej.
Działam na układzie AT90USB1287, program ma na celu w odpowiednim czasie podać obciążenie na turbinę, jako że turbina kręci się około 2000 obr/min postanowiłem ze najlepiej będzie wykorzystać do tego kanał pwm tak aby mikrokontroler ustawiał sam wypełnienie i okres.

Do określenia pwm używam 2 liczników. pierwszy do zliczania impulsów generowanych przez czujnik laserowy i określenia prędkości obrotowej turbiny. Drugi do wygenerowania sygnału PWM korzystając z pierwszego.

Przestudiowałem trochę tematów na forach i stworzyłem "coś" co nawet się skompilowało pod Atmelstudio jakis czas temu, ale jak do tego teraz wróciłem to nie idzie, tak w Eclipse też próbowałem projekt C stworzony, debugowanie wyłączone, częstotliwośc ustawiona na 16Mhz we właściwościach projektu.

Domyślam się że jest to jeden wielki Bug ale człowiek uczy się na błedach najbardziej, prosiłbym o wskazówki co poprawić aby zaczeło działać normalnie ;) Z tego co widze po innych tematach błąd jest pewnie przy deklarowaniu zmiennych, możliwe że przy ustawianiach liczników, częśc obliczeniowa powinna być dobra ale nie zaszkodzi rzucić okiem. Przerwań nie wykorzystywałem bo po prostu nie wiedziałem jak i po co dokładniej się ich używa ( teraz przy dostępie do filmików zgłębiam ten brak wiedzy), ustawienie liczników jest w głównej pętli z tego co widze w większości jest to robione globalnie. I nie jestem pewien czy nie brakuje mi jakiejś biblioteki w include.

Wszelkie uwagi, krytyke, propozycje i porady uważam za mile widziane. Pozdrawiam

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
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 19:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 lut 2013
Posty: 600
Pomógł: 47

Wydaje mi się że na początek trzeba by zadeklarować typ zmiennych dla" impuls, okr, freq, obroty".


Autor postu otrzymał pochwałę

_________________
https://www.instagram.com/myfirstquadcopter/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 19:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 gru 2012
Posty: 530
Lokalizacja: Bydgoszcz
Pomógł: 8

Hej. Tak z innej beczki - 2000 obrotów/minutę dla turbiny wiatrowej to chyba trochę za dużo. Np turbina 4MW Siemens SWT-4.0-130 kręci się z prędkością 5-14 rpm. No chyba, że mówisz o jakiś mini turbinkach... :-)

Wysłane z mojego GT-I9100 przy użyciu Tapatalka

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 20:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Witam

czy ten zapis pinu (1<<DDD0) jest poprawny
może w tym procku (AT90USB1287) tak jest określony pin D0
a może to pomyłka.
Pytam ponieważ nie miałem do czynienia z tymi uC
a wpadło mi to w oko jako nietypowe :)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sty 2014, o 02:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

@kurnachatka Ok po porannej kawie tym się zajmę

@kila tak, nie jest to typowa turbina wiatrowa, dokładniej jest to generator DC zrobiony na turbine w celu symulacji turbiny, o ile pamiętam przelicznik mniej więcej dla niego wynosi 1000 obr/min = 1V.

@Zaba Pisałem ten kod pare miesięcy temu po nocach także jak mówiłem może to być jeden wielki bug :], rano sprawdzę to z datasheetem



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sty 2014, o 10:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 maja 2013
Posty: 432
Lokalizacja: Gostyń / Poznań
Pomógł: 25

Ja bym polecił na początek pooglądać poradniki Pana Mirka o konfiguracji wejsc, wyjść, o timerach no i o przerwaniach bo jak tu liczyć impulsy z czujnika bez przerwań... No i dobrze gdybyś wygospodarował stówke i zanabył BLUEBOOKA to na pewno by ci wieeele pomogło...

Także na dobry początek www.mirekk36.blogspot.com

_________________
Podpis...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sty 2014, o 12:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

@eMCe2 o portach I/O troche liznąłem ale zajrze jeszcze raz bo tutaj całkiem inaczej się to przyswaja, Bluebook trafi do mnie myśle pod koniec następnego tygodnia też doszedłem do tego wniosku no i bloga cały czas śledze ;]

Ok sprawdziłem jeszcze raz porty z notą katalogową i doszedłem do wniosku że wcześniej ustawiałem Pin D0 jako wejście ale podciągałem do Vcc pin D1, czy może lepiej jest ustawić kierunek całego portu jako wejście przez

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


i podciągnąc do Vcc tylko piny z których się korzysta, w moim przypadku

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
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2014, o 16:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

Ok witam ponownie trochę przysiadłem znalazłem parę błędów i kilka usprawnień, teraz dalsza częśc pytań bo już się powoli gubię w licznikach, wiec pierwsze czy są one poprawnie ustawione,

2. druga sprawa w przerwaniu chcialbym żeby wartośc zliczona w liczniku 1 była "przechwytywana" do innej zmiennej i licznik zaczynał od 0 skąd "przechwycić" te wartość z OCR1A?

3. czy wektor przerwania jest dobrze dobrany bo nie znalazłem opisób które są do czego, chyba że mi migneło gdzieś niezauważone

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
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2014, o 21:43 
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

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

Twój kod ustawiania licznika 1 jest błędny w sensie tego co chcesz robić.
OCR1A to rejestr do porównywania i tu nie należy go używać tylko rejestr ICR1:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

To działa w ten sposób, że timer1 sobie liczy impulsy i jak zmieni się stan na wejściu przechwytywania to wtedy aktualna wartość timera1 jest kopiowana do rejestru ICR1 (timer liczy dalej) i zostaje wygenerowane przerwanie które powoduje przeskok do funkcji ISR(TIMER1_CAPT_vect) gdzie spokojnie odczytujesz sobie wartość z ICR1 i zerujesz timer1. Preskaler trzeba tak dobrać, żeby przerwania występowały na tyle często, że timer1 nie przekręci się z 65535 na 0, bo wtedy impulsy nie odpowiadają stanowi faktycznemu. Dziwne jest to obliczenie dla PWM, bo wychodzi na to, że OCR3A = 1/ICR3


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sty 2014, o 13:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

co mam rozumieć przez wejście przechwytywania? Jakiś oddzielny pin do niego? czy to po prostu to samo wejście przez które zliczam impulsy (PD0)choć to raczej by nie miało sensu. Preskaler mam na 256 wtedy będę miał 62500 impulsów na sekundę, aaa ok czytam i powoli mi się rozjaśnia, jeśli chcę aktualizować drugi licznik co 5-10 sekund to powinno starczyć, co do obliczeń pwm z datasheetu wyczytałem że te 2 wartości właśnie służa do określenia wypełnienia i okresu sygnału, więc pomyślałęm że będzie je dobrze ustawić obliczając częstotliwość i okres z prędkości obrotowej więc do tego skorzystałem z tego wzoru:

Cytuj:
n = 60 / (ti * ni)
n - prędkość obrotowa [obr/min]
ti - czas trwania impulsu [s]
ni - ilość impulsów na obrót

ti = i * p / F_CPU
ti - czas trwania impulsu [s]
i - ilość zliczonych impulsów w timerze
p - preskaler timera
F_CPU - częstotliwość taktowania procesora [Hz]

czyli
n = (60 * F_CPU) / (i * p * ni)


wirnik ma 3 łopaty dlatego też pełny obrót następuje po 3 impulsach, podzielone przez 60 daje mi liczbę obrotów na sekundę czyli mam częstotliwość i okres ze wzoru 1/f, chyba że moje rozumowanie gdzieś wtedy zawiodło, a i jeszcze jedno do licznika w trybie pwm trzeba prescaler ustawiać?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sty 2014, o 19:19 
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

Zapominamy o przechwytywaniu :roll: Ten tryb pracy się tu nie nadaje. Na razie skup się na jednej rzeczy, czyli wyznaczeniu prędkości obrotowej. Masz 3 impulsy na obrót i około 2000 obr/min, czyli 3 * 2000 impulsów/min = 6000 impulsów/min => 100 impulsów/sek i tego się trzymasz. Jeden timer ma pracować jako licznik tzn., że taktowany jest z wejścia T...(wejście które posiada aką alternatywną funkcję), a nie razem z procesorem. Drugi timer należy skonfigurować aby generował przerwanie co 1 sekundę co nie zawsze się da, ale można sobie w przerwaniu zwielokrotnić mniejszy czas. Pierwszy z timerów zlicza sobie impulsy podawane na wejście, a drugi co sekundę odczytuje jego wartość i zeruje. Przykład:
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: 22 sty 2014, o 19:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

Ok prosty i przejrzysty o to mi chodziło jeden jako licznik drugi w trybie CTC czyli liczy do OCR2A i przerwanie, pytanie mam co do wzoru
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
jest to jakiś "sztywny" wzór czy trzeba go odpowiednio dobrać wg swoich parametrów aby te 10ms otrzymać ( dokładniej mnie zastanawia skąd się ten 1000 wziął) bo przy częstotliwości 16Mhz wychodzi mi tu 15 z groszami. Wartośc obrotów będzie się zmieniać może to być 1000 a może też być chyba 3000 obr/min nie więcej, więc w liczniku powinno się to zmieścić przeliczając na impulsy na sekunde, w przerwaniu rozumiem określany jest czas przechwycenia 1s gdybym chiciał np 5 czy 10 sekund najwygodniej jest zmienić myśle wartośc tutaj
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

zamiast 100 odpowiednio dla 5s -500 i dla 10s - 1000

drugie pytanie jak z tego przejśc do określenia pwm? mając już impulsy/sek mamy w sumie częstotliwość z której można policzyć okres (T=1/f) starczy wpisać to w rejestry kolejnego licznika ustawionego w tryb pwm? w dobrą strone myślę czy już coś pomieszałem?
PS. przyszedł mi już BB takżę będę dokładniej mógł zgłębić ten temat :]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2014, o 19:28 
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

W wzorze ma być 100 :oops: jak 100Hz
Sztywny ten wzór nie jest bo jest jeszcze preskaler 1024 lub inny, ale obliczając sobie na oko musisz się zmieścić w OCR2A, który może mieć maksymalnie 255. Jeśli się nie udaje to wtedy przechodzimy na inną częstotliwość np. 1kHz, a licznik w przerwaniu musi zliczyć 1000 i wtedy musi mieć rozmiar 16bit (uint16_t). Licznik oczywiście można porównywać z większą liczbą uwzględniając pojemność zmiennej. Dla prędkości 1000 obr/min (przy 3 impulsach na obrót) wyjdzie 3*1000/60 = 50, a dla 3000 wyjdzie 3*3000/60 = 150, więc spokojnie się zmieści.

Aby przenieść to na PWM to myślę że wystarczy wpisać wprost do OCR3A, a ICR3 powinien mieć stałą wartość np. 200 i wtedy dla 50 masz wypełnienie 50/200 = 25% dla 100 - 50% i dla 150 - 75%. Większa prędkość -> większe wypełnienie i bardziej obciążysz turbinę. Oczywiście można jeszcze liczbę impulsów potraktować jakąś funkcją i wtedy wpisać do OCR3A. To już zależy co dokładnie ma się dziać.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2014, o 16:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

Troche się zaczytałem ;] ok już tłumacze jaki jest konkretny cel w stosowaniu PWM. A więc głownym celem jest podanie obciążenia na turbine w odpowiednim momencie.
Obrazek

kiedy łopata zbliża się do cienia wieży obciążenie ma być jak najmniejsze i dopiero kiedy wejdzie w cień wieży ma ono być dołączane, Przy stałej prędkości to nie jest trudne i tutaj wystarczyło by dobrać okreś trwania impulsu i wypełnienie 50%, jednak że to ma być aktywne sterowanie i zakładając że obroty mogą się zmieniać nie mogę użyć tutaj rozwiązania ze stałym okresem, im większe obroty tym mniejszy okres impulsu tak aby hmm zdążył się wyrobić między łopatami.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 21:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

tak się zastanawiam dalej bo w sumie mógłbym te zliczone impulsy podzielić przez 3 i wpisywać do ICR3 i miałbym wtedy szerokośc impulsu mniej więcej dobraną która zakładam że będzie się zgrywała (choć w to wątpie, ale jakoś działać musi) i OCR3 ustawiać jako 1/2 ICR3 wtedy impuls miałby zawsze 50% wypełnienia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2014, o 15:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

Witam ponownie ;] po kilku próbach i poprawkach i godzin przed książką i kodem kolejna porcja pytań

1. problem przy ustawianiu PWM, przy ręcznym wpisywaniu ustawień OCR i ICR dostaje ładny wykres przebiegu natomiast przy przypisywaniu ze zmiennej dostaje ciągłą linie (zakładam że błąd jest w sposobie zapisywania do ICR/OCR lub złym funkcjonowaniu licznika) czy do zapisania zmiennej w rejestr wystarczy zwykłe
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
?

1a. Przy ustawieniu trybu fast pwm i ICR na top ICR odpowiada za okres impulsu a OCR za wypełnienie, czy na odwrót? u siebie chciałbym regulować okres a wypełnienie mieć stałe 50%

2. przy ustawieniu licznika w tryb zwykłej pracy (czyli zliczanie impulsów) taktowanie musi być z wyjścia T0, czyli jak mam impulsy do zliczenia na wejściu D1 to i tak do wejścia T0 musze podpiąć zewnętrzny zegar? czy może impulsy mają trafiać na wejście T0

3. Ciekawostka dotycząca samego układu at90usb1287 domyślnie jest dostarczany z kwarcem 8MHz i zprogramowanym preskalerem 8 co daje wyjściowe 1 MHz, jest jakiś sposób by sprawdzić aktualną częstotliwość pracy układu?

dorzucę jeszcze kod całego programu w razie potrzeb
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
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2014, o 18:27 
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

1 i 1a. ICR jest wartością odpowiadającą za okres, a OCR za wypełnienie (z tym, że niekoniecznie ;) ). Generalnie zawsze należy sprawdzić w specyfikacji jaki tryb został wybrany za pomocą bitów WGMxy. ICR powinno być większe od OCR. Do ICR wpisuj imp_na_sek a do OCR imp_na_sek/2
2. Jak chcesz zliczać impulsy sprzętowo to musisz wykorzystać dedykowane wejście T0, ale możesz też zliczać programowo, badając stan dowolnego z wejść.
3. Napisać najprostszy program do migania LEDem co sekundę. Preskaler można też zmienić podczas działania programu.
L.h.michalak napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nigdy nie używaj takiej konstrukcji. Czy wiesz, że samo:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ustawia wszystkie bity poza WGM10.
Domyślnie większość bitów jest wyzerowana i nie trzeba się nimi martwić, a tylko ustawić te bity co mają mieć 1, a jak już chcesz wyzerować bity to zrób to w osobnej linijce.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lut 2014, o 00:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

Tak kolejna porcja wiedzy z datasheetów i przypuszczenia miałem prawidłowe, źle było adresowane wejście licznika 0 ( tak to jest korzystać z czyichś notatek i instrukcji) muszę je przepiąć pod T0. I tak próbowałem też tego przechwytywania ICr=imp_na_sek i OCR=imp_na_sek/2 ale skoro na wejściu nie było sygnału to szkoda żeby działało :] zabieram się za poprawki i ponowne testy.

Hmm co do bitów tak wiem że domyślnie są wszystkie wyzerowane, ale to mnie zdziwiło zerując jeden bit WGM pozostałe 3 dostają 1 ? poprawię to chyba na standardowy sposób ustawiania 1 tylko dla tych potrzebnych



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lut 2014, o 18:26 
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

L.h.michalak napisał(a):
Hmm co do bitów tak wiem że domyślnie są wszystkie wyzerowane, ale to mnie zdziwiło zerując jeden bit WGM pozostałe 3 dostają 1 ?
Tu też się mylisz. Do ustawiania bitów używa się takiej konstrukcji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

Jak zmieszasz jedno z drugim:
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: 25 lut 2014, o 16:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

Kurczak brakuje mi pomysłów co jeszcze może mi stać na przeszkodzie działania tego ustrojstwa, dzisiaj również dostawałem równą linie na wyjściu dla Pwm, posprawdzałem jeszcze raz połączenia, przepiąłem wejście sygnału pod T0, sygnały dochodzą, program wydaje się być teoretycznie dobry, ten licznik 0 nie daje mi spokoju co mu może szkodzić. Może impulsy są za słabe? z tego co z oscyloskopu odczytałem mają około 1.5V, ale jak teraz jeszcze patrze przy wklejaniu kodu nie zdziwiłbym się jakbym skopał przy ustawianiu T0 jako wejścia.

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
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lut 2014, o 19:13 
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

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

W tym trybie zresztą jak sam piszesz to OCR1A wyznacza TOP, więc powinno to wyglądać tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

To bardzo dobry tryb, bo OCR1A jest buforowany w przeciwieństwie do ICR1, a tutaj TOP ciągle się zmienia.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2014, o 18:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

a czemu tutaj akurat OCR1A i OCR1C do ustawiania wypełnienia i czasu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2014, o 19:08 
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

L.h.michalak napisał(a):
a czemu tutaj akurat OCR1A i OCR1C do ustawiania wypełnienia i czasu?

Bo tak jest w specyfikacji procesora przy opisie fast PWM dla trybu 15. Jak wybierzesz inny tryb to będzie inaczej.
50% możesz też generować na nóżce OC1A dla tego trybu i nie korzystać z innego rejestru do ustawiania wypełnienia. Wystarczy, że ustawisz bity COM1A1 i COM1A0 na 0 i 1. Wtedy przy każdym doliczeniu timera do OCR1A wyprowadzenie OC1A zmieni stan na przeciwny.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 mar 2014, o 16:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

ok świeżo po testach coś zaczęło działać, jest pwm na wyjściu tylko jest stały nagrałem filmik z wykresem jak on się zachowuje

Czerwony wykres to sygnały z otrzymywane z czujnika, niebieski z wyjścia na PB7

http://youtu.be/bR0odEvDcWA

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


w pętli głównej przy zapisaniu
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
sygnał pwm zachowuje się tak samo



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2014, o 21:40 
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

T0 nie zlicza. Możliwe, że dlatego, że na wejście podajesz szpilki. Spróbuj zmienić zbocze T0 na opadające.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2014, o 00:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

to samo mi przyszło na myśl, bo kanał podpiąłem zaraz za czujnikiem a dalej leci on przez parę transoptorów bodajże. w piątek będę na uczelni sprawdzę jaki sygnał trafia na wejście. Jeszcze pytanie do długość impulsu jeśli zwiększam obroty również zwiększy się czas stąd pomysł z odwróceniem tego przez zapis 255 - imp_na_sek, myślisz że zda to egzamin? sprawdzę też pomysł z OC1A tylko nie wiem czy nie jest już zajęte przez coś



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2014, o 16:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

Dalej nic efekt taki jak poprzednio zmiana zbocza nie pomogła, co dziwniejsze podając impulsy bezpośrednio z czujnika na wejście uC również ich nie wychwytuje, i nie wiem czy to może wina uC że się nie wyrabia z ich łapaniem czy może wina zbudowanego tam układu do którego nie mam dokładnego schematu jak co jest podłączone, ale coś mi się wydaje że programowo to tego nie rozwiąże.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2014, o 18:57 
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

Napisz najprostszy program przepisujący stan wejścia na wyjście i tak to sprawdź. Może wystarczy dodać tranzystor npn + rezystor.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2014, o 18:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sty 2014
Posty: 29
Lokalizacja: Lubartów
Pomógł: 0

jeszcze mam w sumie jedno pytanie odnoście Timera1, w DS mam cała tabelkę z trybami pracy, fast pwm mam 8,9 i 10 bitowy i zwykły fast pwm z ocr na top, jako że timer1 jest 16 bitowy rozumiem że i w tym trybie OCRA ma 16 bitów więc mogę do niego wpisać wartość większą niż 255 ale max 65,536



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2014, 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

Maksymalnie 65535 = 0xFFFF

_________________
Dragonus Cracovus: Biomagia



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: 33 ]  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