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



Teraz jest 19 maja 2026, o 14:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
Autor Wiadomość
PostNapisane: 6 lut 2015, o 21:31 
Offline
Nowy

Dołączył(a): 01 lut 2015
Posty: 24
Pomógł: 0

Witam robię generator przebiegu prostokątnego ( regulacja czestotliwości za pomocą potencjometru + 2 klawisze do zmiany zakresu czestotliwości- jeden prescaler zmienia na 8 drugi na 1024 ), oraz regulacja amplitudy za pomocą potencjometru + LCD ) taki oto generator do swojego małego laboratorium i chciałem was spytać czy mój schemat blokowy kodu programu jest prawidłowy.

Obrazek

a teraz moje rozważania an temat schematu programu ( z gory mówie że jestes początkującym programistą AVR )

w głównym programie ustawiam
{
ustawiam przerwanie od naciśnięcia klawisza 1
ustawiam przerwanie od naciśnięcia klawisza 2
}

przerwanie od klawisza1
{
włączam timer1 prescaler64 Tryb CTC
wyswietlanie
}

przerwanie od klawisza2
{
włączam timer 2 prescaler 1024 Tryb CTC
wyswietlanie
}

i własnie nie wiem jak tu wogole sprawa w adc wygląda dlatego nie chce sie sam za to brać.
jak te adc powiązać z tym

co o tym myslicie ? Regulacji wypełnienia nie robie bo w CTC niema takiej opcji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2015, o 22:02 
Offline
Użytkownik
Avatar użytkownika

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

Dodał bym regulację podświetlenia do LCD
bo może Cię oślepić (żart) :)
a tak na serio to się przydaje kiedy w nocy siedzisz nad projektem

------------------------ [ Dodano po: 16 minutach ]

Na temat ADC masz cały poradnik na Mirka kanale na YT

nie wie jak do tego podejdziesz ale zmieniając wartość w rejestrze od porównania
przy trybie CTC możesz zmieniać wypełnienie np.
raz zliczasz do 70 w przerwaniu zmienisz stan wyjścia na przeciwny i żeby
następne liczenie było do 185 (255-70)
i znowu w przerwaniu zmiana stanu wyjścia i wpis do rejestru 70 ,
masz wypełnienie 27,5/72,5 %

Pewnie to można zrobić na wiele innych sposobów ale tak to wymyśliłem na szybo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2015, o 22:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
kojot90 napisał(a):
...regulacja czestotliwości za pomocą potencjometru ...oraz regulacja amplitudy za pomocą potencjometru

Jeśli chodzi o częstotliwość to najprościej OCRx przyjąć jako ADC*64.
W.g mnie amplitudę najprościej zrobić jako analogową - takie "VOLUME".
...a Ty z tym C++ to na serio ;) ?

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2015, o 09:38 
Offline
Nowy

Dołączył(a): 01 lut 2015
Posty: 24
Pomógł: 0

Zaba

nie rozumie za bardzo, patrze do noty katalogowej i widze
Obrazek

na czestotliwość wpływa rejestr OCRnA i nic pozatym nieda sie zmienić. w trybie fast PWM da sie zmieniać wypełnienie ale czestotliwość jest stała.

Być może da sie zrobić tak jak mowisz a ja za malo wiem jeszcze, masz może jakiegoś linka na ten temat, chetnie poczytam.

Kicajek
tak własnie chce zrobić tak jak napisałeś ADC chce wpisywać do OCRnA

tylko nie wiem jak to ogolnie taki schemacik razem z adc ma wyglądać, jak ustawić przerwania, ale dzisiaj bede siedział i oglądał filmy Pana mirka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2015, o 19:14 
Offline
Nowy

Dołączył(a): 01 lut 2015
Posty: 24
Pomógł: 0

Panie markowski]
Bardzo dziękuje za odpowiedz, teraz będzie mi na pewno łatwiej.



Ostatnio edytowano 7 lut 2015, o 20:33 przez kojot90, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2015, o 20:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

A ja tak z innej beczki.
1 Mokrowski a nie Markowski
2 Przeczytaj co napisałeś i popraw żeby dało się zrozumieć

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2015, o 22:01 
Offline
Nowy

Dołączył(a): 01 lut 2015
Posty: 24
Pomógł: 0

Da się zepsuć mechanicznie timer w atmega8?? mam dokładnie kod napisany według noty katalogowej, diodę mam prawidłowo podłączona ( jeśli daje dla sprawdzenia DDRB= 0b00000110; PORTB |= _BV(PORTB1) ; TO ŚWIECI )



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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2015, o 22:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Wywal #define F_CPU 1000000 //ustawienie oscylatora na 1MHz
WGM12 "znajdywa" się w TCCR1B

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2015, o 22:40 
Offline
Nowy

Dołączył(a): 01 lut 2015
Posty: 24
Pomógł: 0

Zmieniłem ale nie pomogło, jutro rano wstane podepne atmega32 i sprawdze czy ten kod programu bedzie działał. Wydaje mi sie że cos z timer jest nie tak ( uszkodzony fizycznie)

A nie wiem czy to istotne ale w chwili obecnej nie jest podłączone tak jak radzi Pan Mirek tylko do testów na płytce stykowej diody guziki programator,LCD. ( bez kwarc, kondensatorów)

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2015, o 23:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

kojot90 napisał(a):
mam dokładnie kod napisany według noty katalogowej

...prescaler też w TCCR1B



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 09:19 
Offline
Nowy

Dołączył(a): 01 lut 2015
Posty: 24
Pomógł: 0

Ale ja ustawiam chce miec CTC na wyjsciu OC1A wiec robię na TCCR1A, w każdym bądź razie jak zmieniłem na TCCR1B nic nie pomogło :(

o cos ruszyło zaraz napisze jak



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 09:46 
Offline
Użytkownik
Avatar użytkownika

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

Może to bez różnicy ale
dodałbym klamry do while(1)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 10:07 
Offline
Nowy

Dołączył(a): 01 lut 2015
Posty: 24
Pomógł: 0

Dziwne timer w trybie CTC działa u mnie tylko wtedy kiedy jest ustawiony tryb zgodnosci komparacji na wyjsciu
(1<<COM1A1)|(1<<COM1A0) -Set OC1A/OC1B on Compare Match (Set output to high level)
lub druga opcja (1<<COM1A1) - Clear OC1A/OC1B on Compare Match (Set output to low level)

według wzoru powinna pikać 1Hz ( 1 pikniecie o czasie 0,5s na sekunde ) a pika z f=2Hz.

int main()
{
DDRB= 0b00000110;

OCR1A = 494; // =1000000/(2024*(1+494)) DAJE 1 HZ = 1 pikniecie na sekunde.

TCCR1A=(1<<COM1A1)|(1<<COM1A0)|(1<<WGM12)|(1<<CS10)|(1<<CS12); // TU ustawiam CTC i presc 1024
TCCR1B=(1<<WGM12)|(1<<CS10)|(1<<CS12); // i tutaj też to ustawiam CTC presc 1024 tylko w takiej konfiguracji działa ale z zła częstotliwością

while(1) ; //pusta pętla
}



klamry nie pomogły.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 17:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Do zapisu w rejestrach podchodzisz błędnie, ponieważ sugerujesz się nazwami poszcz. bitów a tak ostatecznie kompilator podstawia tam liczby w.g #def. w iom.h:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Gdybyś zapisywał prawidłowe nazwy do właściwych rejestrów to jest to bardzo pomocne, jeśli mylisz rejestry to powstaje galimatias.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

...widzisz różnicę?

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2015, o 11:19 
Offline
Nowy

Dołączył(a): 01 lut 2015
Posty: 24
Pomógł: 0

Kicojek dzieki za odpowiedz, jest dokładnie tak jak mowisz, po przeczytaniu całej noty wczoraj to własnie zrozumiałem to i udało mi sie to wczoraj uruchomić, to jest niesamowite 3 linijki kodu a musiałem dużo datasheet czytać i pare godzin poswiecić.
Narazie generator powstaje :) wszystko idzie w dobrą strone. jak skoncze przekaże kod programu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2015, o 21:27 
Offline
Nowy

Dołączył(a): 01 lut 2015
Posty: 24
Pomógł: 0

Mam takie pytanko jak mam adc o rozdzielczości 10 bit to w rejestrze ADC zapisuje od 0 do 1023 i to sie zgadza jak uruchamian fizycznie jeden adc.

ale nie rozumie czemu jak uruchamiam tryb free run i mierze napiecie na dwóch kanałach (pozostałe do masy) to uzyskuje pomiar od 0 do 125. myślałem że ten rejestr podzieli sie na dwa i bede mógł uzyskać od 0 do 511. wrazie czego wklejam kod programu jak uruchamiam pare adc.



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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2015, o 14:35 
Offline
Nowy

Dołączył(a): 01 lut 2015
Posty: 24
Pomógł: 0

Da sie ustawić aby korzystając z kilku ADC zapisywał sie wynik od 1 do 1024 (skoro rozdzielczość jest 10 bit)?? jak sie odwołać bo jak sie odwółuje do całego rejestru ADC to dostaje "- - potem dziwny wynik. "



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2015, o 23:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Nie mówię że źle, ale nie spotkałem się z takim #define:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W iom8.h nie ma odpowiednika PORTC3 i 4
To jak później to wykorzystujesz raczej powinno być tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2015, o 22:34 
Offline
Nowy

Dołączył(a): 01 lut 2015
Posty: 24
Pomógł: 0

Ma pytanko

Czy podczas pracy timera można mu zmienić prescaler mianiowicie do jakiegos pinu podłacze sobie klawisz i jezeli on jest wcisniety to zmieniam rejest TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS10); i w nim prescaler na inny.

Jesli tak to moje pytanie czy musze wpisywać WGM ?? bo tylko CS odpowiada za prescaler to może pozostałe wartości nie warto wpisywać



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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