Witam :) Oto kod: $regfile = "m8def.dat" $crystal = 1000000 Config Portb = &B11111111 : Portb = &B11111111 Config Portc = &B1111111 : Portc = &B1111111 Config Portd = &B00000000 : Portd = &B11111111 Do If Pind.1 = 1 Then Portc.3 = 1 'Wyjście 1' If Pind.1 = 1 Then Portc.2 = 0 If Pind.1 = 1 Then Portc.1 = 0 If Pind.1 = 1 Then Portc.0 = 0 If Pind.2 = 1 Then Portc.3 = 0 'Wyjście 2' If Pind.2 = 1 Then Portc.2 = 1 If Pind.2 = 1 Then Portc.1 = 0 If Pind.2 = 1 Then Portc.0 = 0 If Pind.3 = 1 Then Portc.3 = 0 'Wyjście 3' If Pind.3 = 1 Then Portc.2 = 0 If Pind.3 = 1 Then Portc.1 = 1 If Pind.3 = 1 Then Portc.0 = 0 If Pind.4 = 1 Then Portc.3 = 0 'Wyjście 4' If Pind.4 = 1 Then Portc.2 = 0 If Pind.4 = 1 Then Portc.1 = 0 If Pind.4 = 1 Then Portc.0 = 1 If Pind.5 = 1 Then Portb.5 = 1 'Poziom A/B' If Pind.5 = 0 Then Portb.4 = 1 If Pind.6 = 1 Then 'Włącz/ Wyłącz' Toggle Portb.3 End If Loop End Nie wiem czy z technicznego punktu widzenia kod jest prawidłowo napisany i będzie działał tak jak powinien, ale plus jest taki, że Bascom nie wykrył żadnych błędów. Poziom A/B - jeden włącznik monostabilny na PD5, który po każdym wciśnięciu włącza stan wysoki raz na PB4 a raz na PB5 - Tutaj kod jest bardziej pod przełącznik stabilny, nie wiem jak to zmienić aby było prawidłowo. Wyjścia 1-4 oraz Poziom A/B na wyjściach będą miały diody Led oraz przekaźniki. Chwilowo nie mam jak sprawdzić kodu, muszę kupić Atmegę bo zamieniłem przez przypadek "+" z "-" i prawdopodobnie ją spaliłem bo programator ma problem z komunikacją (USBasp) - tiny2313 wykrywa bez problemu. Jeśli zewnętrzny kwarc pomógłby przy płynniejszej pracy układu (a tym bardziej nie zacinaniu się) to o jakiej częstotliwości dać? Jakby ktoś mógł zerknąć na kod i podrzucić jakieś wskazówki to byłoby super :)
|
|||
Przerobiłem kod pod
Przerobiłem trochę kod i testuję go na Attiny2313 żeby sprawdzić czy wszystko będzie chodzić tak jak to wymyśliłem :)
Wersja I
Wersja II
W obydwu przypadkach chodzi niemalże identycznie, chociaż działanie wersji z Select Case bardziej mi odpowiada, bo po włączeniu zasilania włączone jest wyjście 1 i nie można jednocześnie włączyć np 2ki i 4ki.
Nie wiem czy można tak to zrobić ale działa.
;-D Można, powinieneś jeszcze
;-D
Można, powinieneś jeszcze zastanowić się nad wyeliminowaniem drgania styków. Co będzie sterowane?
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Jeśli drganiem styków
Jeśli drganiem styków nazywane jest to że nie działa włącz/wyłącz tylko wariuje za każdym razem inaczej to nie mam z tym żadnego problemu.
Sterowane będą przekaźniki które dalej będą swoje robić:)
Jedyna rzecz którą bym chciał zmienić a nie wiem jak to fakt że po podłączeniu zasilania wszystkie wyjścia się włączają na jakieś mikrosekundy - na wszystkich diodach mam szybki błysk, ale bardzo słaby dioda ledwo świeci), i chciałbym się tego pozbyć.
Siedziałem dzisiaj cały dzień i w końcu udało mi się zrobić cały układ tak jak miał działać. Nie wiem czy kod jest poprawnie napisany, ale skoro wszystko pięknie chodzi to chyba jest, chociaż pewnie dałoby się go odchudzić :)
Problem mam teraz inny bo potrzebuję do tego całego układu dorobić drugi układ z menu w którym wybierałbym ustawienia i zatwierdzał, i zastanawiam się czy zrobić wszystko na jednym wielkim mikrokontrolerze czy z wyjść z jednego i wejść na drugi (co chyba jest trochę bez sensu)
Wszystko sobie rozrysowałem i
Wszystko sobie rozrysowałem i wychodzi na to że łącznie będę wykorzystywał 31-32 porty I/O. Myślałem nad Atmega32 ale to wyjdzie w praniu.
Podstawowe sterowanie mam już zrobione i działa ale ciąg dalszy jak dla mnie to koszmar :D
Aktualnie staram się cokolwiek zrozumieć z działu "Menu wielopoziomowe". Muszę zrobić takie menu:
wejście poprzez przycisk SET,
potem do wyboru 4 opcje (Wyjścia 1-4) - można wybrać tylko jedną, po wciśnięciu danego przycisku miga dioda odpowiedzialna za wybraną opcję, zatwierdzenie wyboru przyciskiem ENTER
do wyboru 4 opcje (Wyjścia A-D) - można wybrać kilka jednocześnie, miga dioda odpowiedzialna za wybraną opcję, zatwierdzenie wyboru przyciskiem ENTER
Fajnie by było jakby w pierwszym poziomie (Opcje 1-4) dało się wykorzystać diody przypisane juz do do Wyjść 1-4.
Ważne też jest to, że jeśli włączone wyjście powiedzmy 2, na którym aktywne jest wyjście np. C i D, a w tym momencie wchodzimy w opcje i przypisujemy cokolwiek do czegokolwiek to nei wpływa to na działanie do momentu zatwierdzenia ostatniego wyboru ENTERem
Może już ktoś się spotkał z takim menu i chciałby pomóc to byłoby super :)
((-;
jeżeli te porty potrzebujesz tylko do przekaźników i/lub przycisków zastanów się nad expanderem IO (PCF8574, PCF8575 itd), nawet z rozbudowanym menu ten Mega8 powinien wystarczyć.
Bardzo ambitne założenia sobie przyjąłeś, do komunikacji z użyszkodnikiem mrygający LED ładnie, lecz pewno warto by tu przerwania już wykorzystać, albo jakiś bardzo wolny PWM może by się dało nastroić teoretyzuję. Jeśli to Twój pierwszy samodzielny projekt z ?C to powolutku sobie zadania dodawaj, bo łatwo się mówi ;-))
Dasz radę sam "to" zrobić tylko żeby zaparcia nie brakło.
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
"TO" ma być kontrolerem do
"TO" ma być kontrolerem do wzmacniacza gitarowego i kontrolerem Pętli efektów w jednym (z malym dodatkiem 2 innych funkcji) :) Jeśli chodzi o dostępne urządzenia/ sprzęty to ciężko mnie zadowolić więc doszedłem do wniosku że jeśli sam zrobię całość według moich wizji to wtedy będę zadowolony :D
To co już zrobiłem jest już tym kontrolerem wzmacniacza, a to nad czym walczę (menu o którym wyżej wspomniałem) to właśnie ta część z kontrolerem pętli efektów. Po prostu zamiast robić jeden kontroler do tego a drugi do tamtego, wcisnę wszystko w jedną obudowę i zamiast wciskać 2 przyciski jednocześnie zrobię to samo jednym :)
Będzie 13 przycisków i 12 wyjść (Ledy) i 5 wyjść na przekaźniki (w kontrolerze - we wzmacniaczu będzie ciąg dalszy).
Wszystko robię w Bascomie bo od tego zacząłem (moje pierwsze kroki zaczęły się na tym forum - tutaj podziękowania dla Mirley'a za pomoc!). Szczerze mówiąc nie mam pojęcia o programowaniu, jedynie rozumiem większość komend bo są z angielskiego, ale nie zawsze wiem kiedy, co i gdzie użyć :)
To udało mi się wykrzesać i działa idealnie - L I N K.
To muszę dokleić to powyższego kodu - L I N K. Tylko zmienić jedną rzecz ale nie mam pojęcia jak :D
A do tych dwóch powyższych dopisać kod z tym menu :)
Jak na zupełnie pierwszy własny projekt to zaszalałem. Ale jeśli i tak miałbym to kiedyś zrobić to czemu nie zacząć teraz :)
A no i jeszcze... o
A no i jeszcze... o Expanderach nie mam zielonego pojęcia, tak samo jak o PWM.
robię migającą diodę po wciśnięciu przycisku i przy wykorzystaniu WAITMS spowalnia mi to cały program (w końcu tak polecenie WAIT działa), w jaki sposób mogę zrobić odstępy czasowe w SELECT CASE tak żeby dotyczyły one tylko SELECT CASE a nie całego programu? Wydaje mi się że opcją TIMER, ale niebardzo potrafię z niej skorzystać.
Quote:robię migającą diodę po
jak sam słusznie zauważyłeś nie możesz się posługiwać tą instrukcją.
Niektórzy do nieprecyzyjnego odmierzania "nieokreślonych" odcinków czasu wykorzystują zmienną inkrementowaną przy każdym wykonaniu pętli głównej, w twoim przypadku gdy dojdzie do obsługi menu, taki sposób zawiedzie.
Więc musisz się wgryźć w obsługę przerwań - nie taki AVR straszny jak go malują. Wierz mi, w dodatku mirley w swoich kodach wszystko ładnie obtłumaczył tak że z powodzeniem dasz sobie radę. Poszperaj poczytaj dla przykładu -> http://mirley.firlej.org/kuchenny_timer
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Dzięki! Już trochę to
Dzięki! Już trochę to przejrzałem, ale efektów zobaczyć nie mogę bo nie mam mikrokontrolera jeszcze, a co chwile zmieniać program na 2313 to bez sensu. Aktualnie czekam na Atmega32 i jak dojdzie to będę walczył dalej.
Zastanawiam się jakie napięcie zastosować. Pierwotnie wzmacniacz, którym się sugerowałem pracuje na napięciu 24V (sterowanie, wzmacniacz na wyższe bo to lampa) z tym że tam nie ma żadnego mikrokontrolera, jedynie LM324 i jakiś HCxx. Ja na początku przyjąłem 12V dla sterowania (w sumie tylko przekaźniki) i dodatkowy stabilizator 5V dla mikrokontrolera. Budowanie tego na napięciu 24V a nie 12V byłoby lepszym rozwiązaniem?
Jeśli Atmege zasilę 5V i na pinie wychodzącym dam LEDa z rezystorem to muszę ją podłączać pod to samo zasilanie co Atmege? Czy mogę dać większy rezystor i podłączyć pod te 12 lub 24V?
(-;
Postaraj się zawsze odizolować ?C od "wysokiego" napięcia. To dobra praktyka. Jeśli chcesz sterować LED-em z napięcia 12-24V DC proponuję po drodze jakiś tranzystorek dla świętego spokoju.
Praktykuj z "małymi" ?C te duże są za duże na pierwszy strzał, jak zdobędziesz praktykę to będziesz "większe" męczył. Mały kosztuje mniej, w razie przypadkowego zniszczenia można powiedzieć że mniejsza szkoda.
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Jednak muszę napisać program
Jednak muszę napisać program na AT89S52. Ale tak mnie trafia że się zastanawiam czy nie lepiej dla obsługi 2 przycisków dać jednego Tiny13, na trzeci przycisk drugiego Tiny13, a na resztę jakąś Atmege8 lub wieksza...
Najchetniej bym ten program napisal w języku C, ale niestety jako że zacząłem całą przygodę od Bascoma to jego troche ogarniam a C musiałbym się uczyć od podstaw, a w dodatku większość napisanego już programu 'tłumaczyć' na język C.
W związku z tym mam pytanie co do '51. Szukałem jakiś książek, tutoriali itp.. ale konkretnej odpowiedzi nie znalazłem. '51 od tych nowszych różnią się jedynie zapisem nazwy portu?
np P.1 - PortB ...
dwie książki gratis
Proszę bardzo tutaj wszystko wyczytasz:
AVR
8051
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Dziękuję! Trochę poczytałem,
Dziękuję!
Trochę poczytałem, może uda mi się coś zrobić na tym AT89 :)
Mam pytanie o przerobienie tego kodu. Znalazłem go w internecie, przerobiłem pod tiny13, nie wiem czy jest poprawnie napisany, ale mi działa bez zarzutu, poza jedną rzeczą którą właśnie chciałbym zmienić.
Na chwilę obecną jest tak że po wciśnięciu przycisku za pierwszym razem rozpoczyna się odliczanie (i Led jest wyłączony), a przy wciśnięciu za drugim razem zliczanie czasu pomiędzy wciśnięciami się kończy i od tego momentu Led błyska z taką częstotliwością jaka jest między pierwszym a drugim wciśnięciem. Potrzebowałbym zmienić ten kod tak żeby podczas pierwszego wciśnięcia Led też błysnął.
Problem rozwiązany :)
Problem rozwiązany :)