Uruchom przerwanie od Countera (najlepiej od porównania wartości zliczonej z ustawioną) i zmień stan portu w podprogramie obsługi przerwania lub prościej, ale mało elegancko zmień [syntax=basic4gl]If Counter1 = 100 Then ...[/syntax] na [syntax=basic4gl]If Counter1 >= 100 Then ...[/syntax] Nie tak jest to, że w chwili zliczenia setki nasz if może się...
Działa a duzo to roboty żeby dodać to tego kodu ustawianie czasu za pomocą dwóch przycisków.
wszystko jest możliwe ;-) nawet przypadkowa zmiana sygnatury procesora ;-)
Witam ! W Bascomie jest takie polecenie: Toggle - zmiana stanu pinu na przeciwny. czy w Arduino IDE jest podobne polecenie i jak ono wygląda ? Pozdrawiam. Stefan W zasadzie takiego bezpośredniego odpowiednika nie ma, ale możesz posłużyć się taką przykładową konstrukcją: digitalWrite(13, !digitalRead(13)); // // Ooooh magic toggle code! e marcus
Witam.Osobiście nie piszę w bascomie ale przerwanie (przerwania) PCINT wyzwalane są zmianą stanu na pinie a ty natomiast próbujesz konfigurować aby wyzwalane było niskim poziomem.
rozwiazan tematu jest wiele ale bitwait czy debounce nie tutaj kooledzy Dim A As Bit A = P1.2 Do If P1.2 <> A Then If A = 1 Then P1.3 = 1 Waitms 10 P1.3 = 0 A = P1.2 Else P1.4 = 1 Waitms 10 P1.4 = 0 A = P1.2 End If End If Loop
Co zrealizować? Programowe zliczanie impulsów? Ustawiasz timer tak, żeby generował przerwanie co 100 us, sprawdzasz stan portu, robisz xor z poprzednim stanem i testujesz, które bity są ustawione - ustawiony, znaczy zaszła zmiana stanu, czyli inkrementujesz odpowiednią zmienną.
Pomyśl o tym, aby zapamiętywać stan poprzedni i inkrementować licznik jedynie w przypadku zmiany stanu.
Jestem kiepski z programowania. Wiem , że procek atmega88 ma możliwość wygenerować przerwanie , przy zmianie stanu portu, prawie a może nawet z wszystkich pinów. Mam projekt, w którym procek jest w stanie powerdown, i zmiana stanu na kilku pinach powinna go wybudzić. Program sprawdzi co i jak zrobi co ma i dalej ma wejść w stan powerdown. Dokładnie...
Kolego poczytaj cokolwiek o AVR rejestr pin odpowiada za wejście czyli czytasz z tego stan wyprowadzenia a sterujesz po ustawieniu ddr na output poprzez portx.y czyli masz podlinkowane zamek a nie stan bo stan to jest jakies wejście do czujnika nie wgłębiałem się ale powinno pomóc stan zmień jak miałeś a na przeciwny zamień zamek a najlepiej odpal najpierw...
A to juz jest problem bo nie da się podzielić 1690 przez 560 bez reszty... Dlatego jedyna największa jednostką jaką mogę używac to 10us. Mnożąc 10us razy 56 mam 560, razy 169, mam 1690 itd 3*560=1680 To tylko 0,5% mniej od 1690. Każdy odbiornik to łyknie.
Wszystkie informacje znajdziesz w datasheet układu lub tutaj na elektrodzie. Kwarc taki jak na schemacie, C1 najlepiej zastąpić trymerem, rezystory podciągające do SDA i SCL najlepiej 4k7. A0 można podłączyć do GND lub VDD (zmiana adresu, patrz datasheet). Warto dodać jeszcze kondensator 100nF blisko wyprowadzeń zasilających układu.
Napisałeś że chcesz monitorować stan wejść . Co to za monitoring jeżeli zmiana stanu wejścia nie zmienia stanu wyświetlacza
Trochę dziwnie te pętle zrobiłeś... a nie wystarczyło zrobić For...Next od 0 do 255 i odwrotnie po czym przypisywać wartość bezpośrednio zmiennej Pwm1a.
Do If Port1 != Pina Then begin Port1 = Pina Zmiana = 1 end endif loop skuteczność psuło Ci opóźnienie czasowe. Wyobraź sobie co się stanie, kiedy stan pinu zmieni się po wykonaniu polecenia Port2=Pina... Pewniejszym sposobem jest skorzystanie z przerwania wyzwalanego zmianą stanu.
Nie musisz się w to bawić "ręcznie" Możesz wziąć zmienną i ustawić w niej 1 jako wartośc a potem zrobic Shiftout gdzie można ustawiać ilość bitów do wypchniecia czyli taktów. Nominalnie Bascom robi dwa NOP`y pomiedzy zmiana stanów zegara. Czyli potem możesz brać jakiś Bajt z wartością 0 i wypychać tylko jeden Bit ;) Potem sobie mozesz napisac makro...
Witam zaczynam programować i mam problem.Potrzebuje zaprogramować atmege8. Założenia po załączeniu przycisku ma dać stan niski i po jakimś czasie ma ponownie dać stan wysoki 2 razy. $regfile = "m8def.dat" $crystal = 8000000 Config Portd = Output Config Pinb.0 = Input Przycisk Alias Pinb.0 Do Portd = &B11111111 Przycisk = 0 Waitms 30 Portd = &B00000000...
Wielkie dzięki za szybką odpowiedź. Zrozumiałem już ideę tych przerwań. Mam jedno pytanie jeszcze wg. tego co zrozumiałem i co napisałeś jako przykład. Programik się kompiluje ale przerwanie nie odpala się (na ten port wchodzi mi sygnał 1Hz z zegarka PCF8583). Nie powinienem jeszcze skonfigurować jakie jest wyzwalanie? Czy zboczem czy stanem czy zmianą?
Hehe, przeanalizuj dokładnie Twój ostatni programik i odpowiedz sobie jeszcze raz na pytanie jak on właściwie działa :) ...jak ograniczyć ruch diody dosłownie na 4 pinach. Tu mamy przesuwanie 2 diodek - "00010001"... Wkradł mi się mały błędzik :) W swoim programie pobierałem dane z linii Data i były to tylko bity 0...3 dla silnika bipolarnego natomiast...
Nie mam zewnętrznego kwarcu podłączonego, w fuse bitach jest ustawiony 1MHz, nic nie zmieniałem tam. Pewność mam, bo tranzystorami steruje dobrze z odpowiednimi czasami. Kolego czemu jesteś taki uparty - przecież chcemy Ci pomóc. Nic nie stoi na przeszkodzie (oprócz Twojego uporu), abyś dodał w tej pętli co wyświetlasz tekst na LCD zapalanie i gaszenie...
W skrócie : ustawiasz co który impuls zegarowy ma byc zliczany, potem ładujesz do rejestru OCR2 wartosc z którą bedzie porównywał i w momencie zliczenia tylu impulsów ile jest w OCR2 następuje zmiana stanu na wyjsciu OCn... najprzyjemniejszą informacją jest to, że procesor robi to niezależnie od wykonywanego programu ;) wiec nie ma mowy o jakichkolwiek...
Czy ktoś ma pomysł jak zrealizować pod Bascomem prostą obsługe przyciska która powinna wyglądać tak. Wciśniecie przycisku powoduje zmiane stanu na Pinie X na 1 a ponowne wciśniecie przycisku zmiane stanu na 0....
tank_driver , i tu się z Toba zgadzam. Niestety wystarczy napisać: [syntax=basic4gl]!Sbi Portc,4 'Zmiana stanu Pinu na 0 !Cbi Portc,4 'Zmiana stanu Pinu na 1 [/syntax] Pozdrawiam
Witam Wszystkie szczegóły odnośnie transmisji masz na stronie 6 w postaci graficznej. Bardzo ładnie wszystko widać. W pierwszej kolejności ustawiasz pin CS i LDAC w stan wysoki a SCK w stan niski. Żeby rozpocząć transmisję do układu (DAC) ustawiasz stan niski na wyjściu CS następnie na wyjściu danych SI ustawiasz najbardziej znaczący bit dwunastobitowego...
pytanie brzmi jak sterować portami w bascomie chodzi o sygnały wejściowe napisałem kod w bascomie układ nie reaguje na danym pinie na zmiane stanu wejściowego co z tym zrobić???? może przykład
PCINT to specjalne przerwania aktywowane zmianą stanu pinu. Dodatkowo wszystkie przerwania PCINT w tych procesorach wywołują jedno przerwanie, w którym należy programowo określić, który pin je spowodował ważny jest też rejestr PCMSK, który odpowiada za maskowanie nieużywanych przerwań. Polecam lekturę datasheetów tych procesorów w celu dokładnego poznania...
Witam; Mam taki problem: Mamy sobie procesorek, który ma jedno wejście i jedno wyjście. Do wejścia np PORTD.1 jest podłączony czujnik i panuje na nim stan wysoki "1" Gdy zostanie spełniony jakiś tam warunek w programie mikroprocesor załącza wyjście. Chciałbym aby stan wysoki na wyjściu utrzymywał się dopuki na wejściu PORTD.1 nie nastąpi zmiana stanu...
Timer i zmiana stanu wyjścia w przerwaniu. Długość dźwięku określić innym timerem.
Nie wiem o jakie przerwania Ci chodzi zewnętrzne czy wewnętrzne. Uwaga dotyczy przerwań zewnętrznych. Jeżeli ustalisz priorytet dla INT0 a będzie ono reagowało na stan a nie na zbocze to procek nie zauważy przerwania INT1 do czasu wystąpienia stanu wysokiego na INT0. Sposób reakcji ustala się komendą Set (opadające zbocze) lub Reset (niski stan) Tcon.0...
Kod mam dobry pracuje na symulatorze poprawnie Lcd podlaczone prawidlowo nopisalem program pare linijek tylko zmiana stanu jednego pinu i tez nie dzala program uzylem compilatora Bascom 4Kb.
Zmiana stanów led po przytrzymaniu przycisku ma jedną zaletę, otóż jeśli chcę szybko przejść do stanu gdzie świecą się oba ledy. W niczym mi to nie przeszkadza. Jeśli tak, to nie ma problemu. Możesz jeszcze zebrać opóźnienia w jednym miejscu: [syntax=basic4gl] $regfile = "attiny13.dat" $crystal = 1000000 Config Portb = &B111100 Portb = &B000010 Dim...
raczej odpada, nie chcę niczego trawić i lutować od nowa, a zmiana bramek jest chyba najprostszą metodą odwrócenia działania układu
Niestety takie zachowanie to wyjątkowo nie chimera i błąd BASCOM'a, ale wina beznadziejnego bootloadera - bootloader powinien zadbać, by po swojej pracy zostawić uC w stanie takim, jak po podłączeniu zasilania.
a i jeszcze bo np w avr tez mialem troche jaj z wyswalaniem zmiana stanu ale pomogo przed wykonaniem ret-a wyzerowanie flag przerwan.
Witam. ........... nie wiem jak zrobić aby te wyzwalanie było tylko od narastającego zbocza. Ściągnij pin 'Start' (PIND.5) rezystorem 10k do GND i odwróc jego logikę na przykład: If Pind.5 = 1 And B = 0 Then Druga sytuacja nie wiem dlaczego ale silnik mi przerywa tak co około sekundę gdy PWM jest włączony. Prawdopodobnie w tym czasie następuje zmiana...
Spróbuj zrobić tak Co4ms: 'procedura obsługi przerwania od Timera T/C0 wykonywana co 4ms Timer0 = 6 'załaduj do Timera0, żeby zliczył 250 (=256-6) impulsów Incr Licznik If Licznik = 6 Then 'zmienna Licznik liczy do 6 aby Licznik = 0 'sprawdzanie stanu przycisku następowało If Pind.0 = 0 Then 'co ok.24ms If Pomoc = 1 Then 'jeśli zmienna Pomoc...
2. Gdzie to wyczytałeś, że INT obsługuje jedynie LOW LEVEL ? W helpie do Bascoma. a jak ma to działać , skoro nie masz procedury obsługi przerwania? Program się kasuje i to jest naturalne. Wszystkie procedury były, tylko wkleiłem fragment który miał znaczenie, reszta oczywiście w pliku źródłowym była obecna. Problem już dawno rozwiązałem, ale i tak...
Mam mały problem. Potrzebuje zaprogramować w Bascomie tak 89c2051 żeby wysyłał mi zmianę stany wejścia ( w tym przypadku wejście traktowane jest jako port 1) przez port rs232c). Jesli nastapi zmiana stanu któregokolwiek z pinów mam dostać komunikat o treści "INz=x" gdzie "x" to aktualny stan wejscia, a "z" nr pinu. Czyżby oczekiwanie na gotowca? Identyczny...
No jezeli masz układ już zmontowany to nc trudnego nawet na pałe wpisywać kształt cyfr i patrzeć co z tego wychodzi. Nikt ci nie podpowie jakie "stany wypuszczać" bez schematu przynajmniej.
Witam sprawdź ten kod co prawda są inne numery portów i inny procek ale jak zmienisz powinno działać. Problem jest jeden w momencie jak naciskasz przycisk i zmieniasz końcówkę na WYJŚCIE to stan tego pinu Musi być (0) Niski , żeby nie zrobić zwarcia. '$sim $regfile = "attiny2313.dat" $crystal = 11059200 $baud = 9600 enable interrupts 'włącz...
Najprościej będzie zmodyfikować program tak: [syntax=vbnet] Rez = Getadc(5) 'przechwycenie wartości napięć na wejściach ADC Pot_max = Getadc(4) If Rez >= Pot_max Then Wait 1 'wykrywanie przeciążenia Rez = Getadc(5) 'przechwycenie wartości napięć na wejściach ADC Pot_max = Getadc(4) If Rez >= Pot_max Then Reset Portd.0 'wyłączenie silnika Reset Portd.1...
Witam. [syntax=basic4gl]Ustaw F_CPU na 8000000 Hz 'Declarujemy zmienną np.Licz Dim Licz As Byte Config timer0 = Timer , Prescale = 256 Enable Interrupts Load Timer0 , 250 '--przerwanie będzie co 8ms On Timer0 Przerwanie 'W przerwaniu: Przerwanie: Load Timer0 , 250 Incr Licz If licz = 125 Then Licz = 0 Toggle Portb.6 '--- zmiana stanu co 1sek End If...
Problem rozwiązałem dużo wcześniej ... a teraz znalazłem czas żeby wyjaśnić. Oczywiście problem tkwił w programie. W etykiecie "posow" w pętli za każdym razem wyświetlam zmienne "I" oraz "X" - zmiana stanu portu B.0 ograniczona była czasem wyświetlania zmiennych na LCD.
W Bascomie jest do tego specjalna instrukcja Zaglądnij do Helpa na polecenie Pulsein zmienna - tu znajdzie się nasz wynik w mikrosekundach PIND - to port do jakiego się podłączymy 1 - pin portu do jakiego jesteśmy podłączeni 0 - wybieramy czy chcemy obliczać do czasu pojawienia się stanu niskiego, czyli 0 czy wysokiego czyli zapiszemy wtedy 1
i to sprawi że jeżeli na którymś z wejść należących do pinb, pinc, czy tam pind (oczywiście to jest do wglądu w specyfikacje atmegi, ale to na potem) stan zmieni się na wysoki instrukcja po "then" się wykona? Jeszcze jedno, chciałbym potem sprawdzic na którym z tych 18 czujników wystąpiła awaria (co za tym idzie zmiana stanu na pinie) Jak myslisz, mozna...
Ja rowniez odswieze nieco temat:) Niedawno zrobilem wykrywacz oparty na MiniPulse 3 i Jabelu. Generalnie te 2 wykrywacze maja czesc pomairowa prawie identyczna, z ta roznica ze MiniPulse 3 potrafi dac wiecej mocy na cewke wykrywacza, ale źre znacznie wiecej pradu. Z moich doswiadczen moge powiedziec ze lapiej zrobic sobie Jabela, znacznie prostrza konstrucja,...
Druga pętla to opóźnienie reakcji na wciśnięty przycisk, a odbywa się to tak, wciskasz przycisk w tym momencie S=0 i pętla się kręci za każdym razem zwiększając zmienna opóźnienie o 1 i teraz jeśli zmienna opóźnienie osiągnie wartość 200 to program opuszcza pętlę tak samo się stanie jeśli jeśli pościsz przycisk s=1. To jest właśnie ten warunek Loop...
Wpisywanie $CRYSTAL bez rzeczywistej zmiany taktowania procesora będzie powodować, że wszelkie opóźnienia i obliczenia kompilatora dotyczące liczników nie będą zgodne ze stanem faktycznym. GETRC5() korzysta aktywnie z licznika TIMER0. Tak manewruje wartością wpisaną do rejestru licznika oraz preskalerem by otrzymać jednakowe odcinki czasu zliczane później...
Tylko nie wiem, czy bym sobie poradził z takim kodem ? Może ktoś mądrzejszy wypowiedziałby się czy tok rozumowania jest słuszny. Ja sobie na pewno z tym nie poradzę. Zastosuje program z odpowiednio szybka zmiana stanu każdej końcówki uC. To chyba będzie najszybszy sposób, tym bardziej, ze zalążek kodu już powstał.
dzięki i mam jeszcze jedno pytanko to co napisałeś to jest wywołanie przerwania a czy można tym sposobem wykożystując dowolny pin jako wejście(nie przerwanie) ustawić tak żeby procesor reagował tylko na zmiane stanu z 0 na 1 lub odwrotnie
Jak rozumiem chcesz defakto dzielić częstotliwość przebiegu jeżeli tak to nic prostszego: pętla for inkrementowana stanem wysokim np. i po osiągnięciu określonej ilości powtórzeń zmiana jakiegoś pinu "wynikowego" na stan przeciwny. problem się zacznie jak będziesz chciał podzielić przez liczbę inną niż wielokrotność 2 nie mam pomysłu jak takie dzielenie...
W ostatnim przypadku Atmega nie odpowiedziała nawet na żądanie o deskryptor... Komunikacja wchodzi w stan IDLE i tyle. Idealnie by było jakbyś w sofcie dodał jakieś logowanie komunikacji żeby zobaczyć co robi w tym czasie Twój procesor. Możesz dodać najprostsze wysyłanie przez RS232. Oscylogram też by się przydał bo te przebiegi co ostatnio wrzuciłeś...
piszę w bascomie uP2051, tym pcf-em chciałbym sterować tak jak portem w uP Jak piszę i2csend 112,64 to zmieni mi się stan całogo portu w pcf-ie a ja potrzebuję zmienić tylko stan jednego pinu nie znając stanu pozostałych pinów
Szybko zajrzałem do noty PCF8583 i tam jest napisane, ze kiedy nie używasz funkcji alarmu to stan na pinie INT zmienia się na przeciwny co 500ms. Tak wiec impuls jest na tyle długi ze spokojnie można go traktować jak zwykły przycisk naciskany co sekundę. [syntax=vbnet]$regfile = "m32def.dat" $Crystal=8000000 $hwstack = 64 $swstack=32 $framesize = 128...
albo zle zrozumialem albo..... $crystal = 1000000 $regfile "attiny2313.dat" Dim Bylo As Byte If(portd.6 = 1) And(bylo = 0) Then Bylo = Portd.6 Wait 5 Set Portd.7 Elseif(portd.6 = 0) And(bylo = 1) Then Bylo = Portd.6 Wait 5 Reset Portd.7 End If end: wyswietla sie blad skladni "if" i "elseif" a w tym wyswietla...
Nie wiem jak to w bascomie nie wnikałem w kod, ale można to zrobić tak że deklarujesz aktywację przerwania jednym zboczem, a po jego wywołaniu zmieniasz tą konfigurację na drugie zbocze (zmiana w rejestrze MCUCR). Albo wywołanie przerwania ustawiasz na dowolną zmianę sygnału i w jakiejś zmiennej przechowujesz stan wcześniejszy i porównujesz
witam, proszę o naprowadzenie lub jakiś przykład: Chcę przypisać wykonanie jakieś operacji atmedze8 (po uarcie) np zmiany stanu danego portu przez wciśnięcie wcześniej zadeklarowanej kombinacji z klawiatury np: IF wcisnę "WA" then ............................ Set Portc.4 ........................... IF wcisnę "WD" then ........................... Reset...
Tak właśnie tam podaje impuls. Czyli If Timer1 = 1 Then Timer1 = 0 Enable Timer0 Waitus 800 End If jest impuls to uruchomi przerwanie timer0 on odliczy zmieni porty i wyłączy i od nowa Schemat t1 -pd.5 impuls Portb.1 Portb.2 wyjścia (zmiana stanów po odliczeniu opóźnienia) I cały układ już jest.
Config Powermode = Powerdown działa tak jak powinno. Artykuły Dondu czytałem bardzo dawno i nie wiem czy wspomniał a tym że w tym trybie pin TX USART pozostaje w stanie aktywnym wysokim. Potem przez niego zasilają się różne rzeczy. Możesz oczywiście na niego wpłynąć programowo, ale nie przez DDRD bo kontrolę nad pinem przejął USART. Myślę, że prostym...
Czyli mogę dwójkowo wpisywać jak w bascomie? Jeżeli twój kompilator to łyknie to możesz, jak nie - to nie. Wywnioskowanie tego wraz sprawdzeniem jest szybsze niż smarowanie na forum (gwarantuję). Tylko dalej nie rozumiem oryginalnego zapisu, czy mógłby mi ktoś to jak najprościej wytłumaczyć? Jeżeli chcesz się uczyć, to zacznij od prostych kodów które...
Przy ustawienie linii RESETU w stan 0 podczas inicjalizacji wyświetlacza powinna pojawić się linia na wyświetlaczu.
Myślę, że kolega tmf źle zrozumiał autora, a kolejne osoby już nie wnikały. Pisząc "programowo" miał na myśli napisanie programu, a nie to że "bez wykorzystania urządzeń mikrokontrolera". Więc jedyna sensowna rada użyć timera w trybie Compare match i zmianą stanu na wyjściu OC Zmieniając wartość rejestru OCRx zmieniamy częstotliwość.
Waitms umieśicłem w pętli dlatego żeby była jakakolwiek komenda, myślałem że między while [warunek] a wend musi znajdować się jakieś polecenie, jednak okzauje się że go tam nie musi być. Sprawdziłem program po zamienie polecenia Set przycisk1 na Set PORTB.0 itd - działa idealnie, po kilkudziesięciu próbach nie było ani jednej nieudanej ani nie było...
Witam. Mam problem z porgramemem w Bascomie, Do tej pory wszystko działało poprawnie aż do poewnego momentu zaczeły sie jakies anomalie. Mianowicie, program nie reaguje na zminanę na porcie A w podprogramie zamkanie_awaryjne, zamykanie i otwieranie, gdy wciskam przycski i wysyłam stam przez RS232 to odczytuje poprawnie ale w Do Loopp Until Kpz=1 nie...
W Bascomie robisz to jedną instrukcją: DEBOUNCE pin_portu , stan , etykieta [, SUB] Radzę otworzyć help'a. Towarzyszy jej w razie potrzeby CONFIG DEBOUNCE = czas
800 obrotów/min to max jakie będą używane w tym enkoderze, ale nie mogę zatrzymywać przerwania, bo impulsy muszą być liczone ciągle, wszystko resztę muszę wykonać pomiędzy przerwaniami. 800 obrotów to daje impuls przerwania co 15us, a ja w pętli nic nie będę robił oprócz sprawdzania czy jest naciśnięty przycisk STOP, więc teoretycznie wszystko powinno...
Witam. Po przejrzeniu noty do atmegi8 wydaje mi się, że dobrze ustawiłeś Timer2 w tryb CTC. Zmiana stanu na OC2 powinna występować z częstotliwością ok. 66kHz co da przebieg o okresie ok. 33kHz. Jedynie bitu TCCR2.7 (FOC2) nie musisz ustawiać. Z tego co wyczytałem to ustawienie tego bitu wymusza zmianę stanu na OC2. A to w twoim przypadku jest niepotrzebne....
Witam wszystkich, mam problem potrzebuję sterować stanem pinu lecz nie potrafię rozgryźć co jest nie tak w kodzie. Poniżej kod w BASCOMIE : [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 1000000 Config Portb.1 = 1 Portb.1 = 0 Config Portd = &B11110000 Portd = &B11011111 Config Portc = &B11111110 Portc = &B11111001 Tccr1a = &B11110010 Tccr1b = &B00011011...
Wszytsko wrzuce w poniedziałek po południu bo nie mam dostępu teraz do niego. Ogólnie przerwanie działa ale też nie do końca, bo jak jedno się wykona i stoi na wait'cie w pętli głównej to już na kolejne, nie reaguje Obsługa przycisku w przerwaniu jest niezbyt wskazana. Owszem przycisk uruchomi przerwanie ale do tego należy również doliczyć drgania styków....
Wiem że nie ma pomiaru napięcia przez adc i tego nie napisałem tylko porównanie jest:) R-47K c-100n. Ale to też nie za bardzo bo napięcie pomiarowe wejściowe się zmienia w miarę ładowania akumulatora więc to napięcie teoretycznie się nie wyrówna i właśnie tak się dzieje. Działa to tak jak rozumie: Wejściowe napięcie jakie jest z ładowanej baterii nie...
Jak nie ma migać, jak w pętli do-loop masz toogle. Ogólnie to twój program jest do kitu. W pętli do-loop sprawdź czy coś się zmieniło, jeśli tak, to skocz do podprogramu. Tam toogle, zapamiętanie nowych wartości, mała przerwa, aby nie migać i powrót. Napisałem w notatniku, ale chyba złapiesz o co chodzi. Spróbuj tak: $regfile = "m32def.dat"...
Można i na pewno lepiej byłoby to zrobić Timerem zwłaszcza jeśli to cześć większego programu bo to przecież zrobiłby nawet Tiny13 :D Jeśli jednak te impulsy są jakieś "wolne" to pewnie wystarczy taki Waitms a nawet możesz użyć innych jednostek Waitus itd.. Na tym Bitwait program mógłby zawisnąć gdyby stan ustalił się na stanie wysokim. Dlatego trochę...
Może pomoże ci coś takiego : Config pind.3 = Output I sprawdź czy nie masz na tym porcie ustawionego jakiegoś JTAG-a albo innego UART-a :) Sprawdź FUSE BIT-y pod BASCOM-em.
To pytanie na szybko odemnie, czy "config Pinb.0 = input : Portb.0=1" spowoduje ze do portu nie trzeba dodać rezystora aby działał z przyciskiem? Tak. Ustawienie portu w stan wysoki spowoduje podłączenie wewnętrznego rezystora podciągającego. Przycisk w tej sytuacji musi oczywiście zwierać do masy.
Nie można wywoływać etykiety a tym bardziej jednej etykiety z innej etykiety ;) .... nie ma w ogóle takiego pojęcia. Wcale się nie czepiam tylko jak chcesz żeby szybciej ktoś mógł pomóc to staraj się operować jakimiś tam chociaż podstawowymi pojęciami programistycznymi. Wywoływać to można podprogram, procedurę, funkcję itp. W bascomie żeby wywołać kawałek...
Dokładnie nie wiem jak w tym swoim Bascom-e masz zrealizowaną procedurę obsługi pilota ale powiązane to ściśle z prędkością zegara bo program w ściśle określonych przedziałach czasowy sprawdza stan wyjścia odbiornika RC5. Więc zmiana częstotliwości taktowania bez zmiany tych zależności czasowych spowoduję błędy odczytu. Musisz sobie zmienić wartości...
To co napisałeś to pewnie Bascom, ale po pierwsze nie używasz przerwania INT0 tylko portu jako wejścia. Żeby używać INT0 jako przerwania powinieneś po pierwsze skonfigurować jakie zdarzenie na INT0 ma wywołać przerwanie: zmiana stanu czy poziom? Zezwolić na obsługę przerwania INT0 i odblokować globalnie przerwania. Po wystąpieniu zdarzenia nastąpi skok...
Dokładnie, zastosuj przerwanie np. SIG_INTERRUPT0 Jeżeli dopuszczasz możliwość włączania i wyłączania dwoma oddzielnymi przyciskami to nie będziesz musiał martwić się drganiem styków. Wystarczyłoby zastosować dwa przerwania (Mega8 ma dwa piny, które obsługują przerwania). Domyślam się jednak, że nie będzie to tobie pasowało. W takim wypadku przerwanie...
Ja dodam książkę Janiczek, Stępień Mikrokontrolery jednoukładowe. Wszystko ładnie wyjaśnione, a potem praktyka: ustawienie stanów na wyjściach zmiana ich stanów, licznik na pętli to samo tylko na licznikach wewn przerwania dokupić max232 i podłączyć do kompa lcd, klawiatura, i2c ;)
silniki od wkrętarek, jak najbardziej ale oczywiście te z przekładnią planetarną przy zasilaniu takiej wkrętareczki napięciem 3V mają kopa i spory moment obr. a co do enkoderów to myslę że można by pomyśleć nad tarczą z przesłonkami od myszki i resztą elektroniki tzn.. tylko nadajnik IR i odbiornik IR o ile się nie mylę to jest to zintegrowany odbiornik...
Nie znałem tych trybów czyli wpisuję wartość do porównania i jeśli jest zgodna następuje zmiana stanu Compare. Ale licznik będzie dalej liczył pozostałą wartość i tu będę miał znów przerwę. Czy w konfiguracji timera dopisujęs clear timer1 = 1 spowoduję, że po sukcesie porównania timer zostanie wyzerowany ?
Witam, mam problem i proszę o pomoc. Posiadam czytnik RFID, który ma wyjście TX. W terminalu na komputerze odbiera ok. przykładowy odczyt (0A00A295DD). Dane wysyłane są w 10-ciu znakach i działa to dobrze, praktycznie żadnych błędów. Teraz opiszę mój problem. Chciałem zacząć od prostej obsługi. Czyli odbiór danych przez UART. Wpisanie jednego odczytanego...
W stanie niskim na K2 i wysokim na K1 serwo jedzie do jednej pozycji ale w stanie niskim na K2 i K1 jeździ w te i z powrotem. Może inaczej. Sterujemy serwem B.2, wychylenie i prędkość regulowana B.3 i B.4 (ADC) Do sterowania mamy dostępne dwa wejścia B.1 i B.0 Obsługa opiera się na 1 - Jednym przycisku B.0 lub B.1, albo oba na raz (każde naciśnięcie...
Witam. Np. tak, zmiana wypełnienia: najpierw piny podciągasz do stanu 1 [syntax=basic4gl]If Pind.0 = 0 Then Pwm1a = 50 'około 20% End If If Pind.1 = 0 Then Pwm1a = 100 'około 40% End If[/syntax]
Wiem dlaczego. Popatrz na listing (Poznaję! #elcafe :) ). Instrukcje IF mogą się wykonać w całości albo i nie. Dlatego zmiana stanu na "0" odbędzie się szybciej, a zmiana stanu na "1" dłużej bo program jeszcze musi "przelecieć" wcześniejszą instrukcję IF i zadecydować czy wykonać instrukję po THEN czy nie. A jak pisałem wcześniej ciągle działające przerwania...
Ja to rozwiązałem poprzez zastosowanie zmiennej głównej nazwanej np Ekran,w której przechowywana jest wartość odpowiednia dla wyświetlania zawartości na lcd np programowanie zegara,wyświetlanie daty,zmiana jasności podświetlenia. Do If ekran=1 then ...instrukcje... end if if ekran=2 then ...instrukcje... end if if ekran=2 then ...instrukcje... end if...
Tzn Dwie ostatnie diody pracują ale jak np ostatnia się pali i chce zapalić dodatkowo trzecią do ta ostatnia gasnie i dopiero gdy jeszcze raz wyśle 3 to wtedy zapali się trzecia dioda w Bascomie tego czegoś nie było. Ponizej kod: [syntax=c] /* * main.c * * Created on: 2011-07-06 * Autor: Łukasz Minderski */ #include <avr/io.h> #include "LukiUart/lukiuart.h"...
Nie tędy droga, Ty musisz zrobić coś dokładnie odwrotnego - nie wygenerować sygnał, ale go zmierzyć. Rozwiązania są 2, ale jeśli programujesz w bascomie i nie masz ochoty na operacje na rejestrach w procesora to kurczą się do jednego. Mianowicie: 0. ustawiasz timer na zliczanie impulsów i zmianę wartości jakiejś zmiennej - parametry dobierz w zależności...
Tu masz troszkę prościej, z użyciem operacji przesunięcia bitowego (krótszy kod, łatwiejsza zmiana prędkości linijki led) Dim Led As Byte Dim Kier As Bit Config Portb = Output 'wszystkie porty b jako wyjścia' Portb = &B00000000 'wszystkie porty b w stanie niskim Config Portd = Output 'wszystkie porty d jako wyjscia Portd = &B0000000 'wszystkie porty...
Odkopuje temat. Jak tym sterować? (w Bascomie) ustawic jako stan poczatkowy DS, SH I ST na 0. Wysłać jakis stan logiczny na DS, ustawic SH na stan wysoki potem ST na wysoki i na odpowiedniej końcówce Q pojawi się stan wg wartości przesłanej w DS? Tylko na ktorej koncowce pojawi sie ten stan? Q0 czy Q7? czy musze powtarzac procedure dla kazdej koncowki...
Witam! Zrobiłem urządzonoko na uC Attin2313, które po naciśnięciu jednego przycisku zaświeca kolejno diody na porcie B; po pewnych bólach udało mi się. Teraz próbuje zrobić to samo lecz z wykorzystaniem przerwań... i mam małe kłopoty, a mianowicie napisałem sobie programik w Bascom'ie: $regfile = "ATtiny2313.dat" $crystal = 4000000 $baud =...
Kiedyś zdeasemblowałem procedurę obsługi RC5 z bascoma (bo chciałem napisać odpwiednia procedure w C lub asm). Niestety ta obsuga RC5 jest mocno niedoskonała , a jedyną jej zaleta jest niezalezność od czestotliwości kwarcu ale zauważyłem że poniżej pewnej wartości nie działa (ile niepamietam ale chyba cos ok.2MHZ). Procedura obsługi po przyjeciu przerwania...
Witam ponownie, Muszę znów prosić o pomoc odnośnie moich kart RS485. Do dnia dzisiejszego wszystko działa jak należy-steruje sobie połową chaty (światło, gniazdka, piec itp. itd.) problem się pojawił gdy postanowiłem sterować drugą połową domu, czyli doprowadzić "projekt" do końca. Kupiłem sobie Raspberry Pi model B+ i to właśnie za pomocą Raspberry...
W przygotowaniu jest druga wersja softu, odpytująca czy nastąpiła zmiana w jakiejkolwiek części systemu - sprawdzanie bitów kontrolnych komendą 7F łącznie z liczeniem CRC dla danych wysyłanych i odebranych. Powoduje to że nie pytamy co chwilę centralę o stan aktualny, tylko pytamy jeśli cokolwiek się zmieniło. Jeśli będzie zainteresowanie tematem to...
Kolejny błąd jest taki, że stan pinu na każdym z portów odczytuje się poprzez rejestr Pind.1, a nie Portd.1 - tylko zmiana stanu (niemożliwy jest jego odczyt). Odczyt Pin, a przypisanie Port. Jeszcze jedno, bo przedtem nie zauważyłem - konfiguracja portów jest następująca: Config Portd.1 = Input, lub Reset Ddrd.1 Jest to w tym przypadku ustawienie pinu...
Dzielnik przez 8 i 9 możesz zrobić na którymś timerze sprzętowym wbudowanym w procesor. A realizacja dzielnika przez 8,5 musi być programowa: Próbkujesz sygnał wejściowy i każda zmiana stanu sygnału wejściowego powoduje inkrementacje zmiennej co daję dwie inkrementacje na okres sygnału (stan wysoki i stan niski liczone osobno). A dalej pozostaje wykrycie...
Czy jak w Bascomie Avr, zapisuję zmienną X do pamięci EEPROM, to muszę wyłączyć przerwania. ? Bo to wygląda tak , że kręci się pętla główna Do...Loop. Jeżeli w tej pętli zostanie wykryta zmiana stanu zmiennej, to jest nowa wartość wpisywana do pamięci. Dodatkowo działa Timer0 do obsługi wyświetlaczy, przerwanie co 4ms Jeżeli w czasie zapisu do pamięci,...
Flaga to taki znacznik, że coś się zmieniło. Żeby nie wysyłać całej litanii znaków, to wysyłaj tylko informacje o zmianie stanu przycisku. Jeśli był 0 a jest 1 to wysyłasz, jeśli nadal jest 1, to nie wysyłasz nic, bo wcześniej już poinformowałeś drugi procek o zmianie stanu.
Problemem przy programowej obsłudze koderów przyrostowych jest to, że układ działa poprawnie jeżeli program przechwytuje kolejne (wszystkie) stany kodera. Jeżeli program krąży w pętli to działa asynchronicznie w stosunku do zmian wejść i dekoder głupieje, bo dostaje niepoprawne następstwa stanów i jeżeli obsługuje je w sposób uproszczony to efekt jest...
Jedyne czego brakuje w schemacie to 2 rezystorów polaryzujących wyprowadzenia Pb0 i pb1 do masy wystarczy 2 rezystory 4k7 i program będzie pracował . ... co potwierdza jedynie, że załączony schemat podłączenia jest nieprawidłowy. Poza tym do programu który jest tam umieszczony reszta jest poprawna . Jedyna wada tego układu to brak możliwości użycia...
zmiana stanu bascom zmiana stanu atmega licznik zmiana stanu
ustawić zaworów ursus volvo silnika deutz temperatura
stacja lutownicza systemy grzewcze serwis
Oprogramowanie nie wykrywa kabla z miernikiem Brymen Smartfon ładuje się tylko do 98% - przyczyny i rozwiązania