Dosyć odważnie sobie poczynasz na mikrokontrolerze mającym 2kB Flash i 128B SRAM :D ale do odważnych świat należy. Odchudziłem Ci trochę kodzik. Obsługa przerwania timera została stuningowana moim programem NoSave Tool. Teraz mikrokontroler nie odkłada na stos większości rejestrów a tylko te potrzebne - w tym przypadku tylko jeden :D Przekłada się to...
Wróci do funkcji2, ponieważ przerwanie zawiesza dotychczasowe działania, a po zakończeniu jego obsługi wraca do wykonywania przerwanych operacji.
To przerzuć się na C. Tam z każdej funkcji możesz wyskoczyć instrukcją return , a że ISRy to też funkcje, to zero problemu...
Kiedy w końcu zrozumiecie, że nie każdy chce zostać programistą i ludzie czasem programują sobie po to by coś zrobić i mieć z tego satysfakcje. Wiem jak oprogramować ADC i to nie tylko w Bascom, ale zauważ że piszemy tu o Bascom. Języku który upraszcza wiele rzeczy dając Ci określoną ilość prostych w użyciu funkcji. Jedną z takich funkcji jest Getadc()...
Wydaje mi się że program kol.tmf da się przetłumaczyć na Bascom. void tmf_impulsator(void)//podprogram albo funkcja w Bascomie { uint8_t i=0;//deklaracje dim na początku programu static uint8_t enc_last; if(bit_is_clear(PINC,4)) i++;//sprawdzenie czy impulsator się ruszył 'if pinc.4=0 then if(bit_is_clear(PINC,5))...
Witam Mam problem programuje w Bascom avr procka atmega8 zrobiłem sobie transmisje RS i mam problem ogólnie wszystko pięknie ładnie działa tylko że w momencie jak wystąpi przerwanie po przez funkcje print zostaje wysłany znak ze zmiennej po czym przechodzi do funkcji waitkey() i oczekuje na odebranie znaku no i właśnie ... oczekuje ale nic nie widzi...
Dziwne jest to że w starszej wersji ten kod działa, a raczej nie powinien :). W helpie pisze że funkcja GetRC5 wykorzystuje timer0 i przerwanie od tego timera. Umieszczenie tej funkcji w przerwaniu INT0 wydaje się być błędne. Przerwanie od timera się nie wykona, dopóki nie zakończy się obsługa przerwanie INT0.
Narzędzie NoSave Tool powstało by zautomatyzować to co kiedyś robiono na piechotę. Ładowałem plik OBJ do Atmel Studio i patrzyłem które rejestry są w użyciu. Sprawa robi się bardziej zawiła kiedy w przerwaniu użyje się jakiejś pozornie nieskomplikowanej funkcji, na przykład Rotate. Taka funkcja to gotowy kawałek kodu umieszczony gdzieś indziej i program...
Witam, Na wstępie chciałbym powiedzieć, że zanim zdecydowałem się napisać ten post, używałem szukajki na tym forum i wujka google ale bez pozytywnych rezultatów (przeczytałem bardzo wiele tematów i skopiowałem wiele kodów). Przejrzałem także plik Help w Bascom. Problem polega na tym, że funkcja getrc5 zwraca zawsze wartości adresu = 255 oraz komendy...
Szkoda że na '51, bo na AVR było by łatwiej. Można to zrobić tak: Procki '51 mają wejścia zewnętrznego przerwania wyzwalanego stanem niskim, lub zboczem opadającym. Ciebie interesuje to drugie (bo zboczemn narastającym się nie da jak w AVR). Nie wiem jak wygląda konfiguracja przerwań w BASCOMie, zobacz w dokumentacji, ale podejrzewam że coś w rodzaju:...
Timer cyka ci co 4ms. Wyliczaj sobie nim sekundy i spokojnie użyj go tez do multipleksowania wyświetlaczy. Co każde przerwanie (czyli co 4ms) załączaj anodę następnego wyświetlacza i wyświetlaj na nim kolejną cyfrę. Cyfry do wyświetlenia pobieraj sobie ze zmiennych np godzina(dziesiątki), godzina(jedności), minuty(dziesiątki) itp. Ale też w tym przerwaniu...
Witam !! Proszę mnie oświecić, gdyż mam mętlik w głowie. Chciałbym zrealizować generator na 89.. o częstotliwości 100Hz, tak aby ta częst. była dostępna na jednym z portów. Hmm... najlepiej sinusoida. Bascom oczywiście.. Czytałem o timerach, ich przeładowaniach, ale coś się u mnie zablokowało. Dla swojego ułatwienia zastosuję kwarc 12MHz aby po wewn....
Mam kolejne pytanie. Mając to że odczytuje PINB i PIND w przerwaniu (wstawka asemblerowa od michalko12) czy mogę wysłać dane powiedzmy od TAB1[0] do TAB1[10] przez TWI (i2c) do drugiego AVR ?? Czy nie będzie jakiegoś konfliktu z tą wstawką ASM?? TWI też wykorzystuje przerwania ?? Ewentualnie jak wysłać to do drugiego AVR (oprócz SPI i UART) bo mam do...
Witam mam pytanie do bardziej zaawansowanych programistów :) Chciałbym się dowiedzieć w jaki sposób zatrzymać program w dowolnym momencie danym przyciskiem. Na przykładzie: odsuwanych drzwi załóżmy do garażu... w jaki sposób po uruchomieniu wyjścia zatrzymać przyciskiem drzwi w dowolnym momencie i aby po zatrzymaniu można było je rozsunąć bardziej bądź...
Raczej najpierw musisz sie nauczyć C No właśnie próbuję. Przez ostatnie kilka dni przewertowałem więcej PDF od kontrolerów, niż przez ostatnie 3 lata :D Na razie największy problem dla mnie to operacje bitowe - wiadomo w Bascom łatwiej. Kupiłem nawet Attiny4313, coby nie brakło pamięci. Problem był jednak w momencie polecenia włączenia przerwań, były...
Witam serdecznie potrzebuje pomocy a raczej rozwiązania małego problemu jak w temacie Bascom - Sposoby na wykonanie jednokrotnie funkcji w petli Program wykonuje pewne funkcje - mam 4 flagi - główna to 1 sekundowa potrzebuje wykonać w sterowaniu 1 raz zadanie - dla przykłądu skocz i daj sygnał buzera Gosub buzer buzer: buz = 0 waitms = 5 buz = 1...
Witam Mam taki kod: $regfile = "m328pdef.dat" $crystal = 14745600 $baud = 9600 ' predkość transmisji $hwstack = 128 ' rozmiar stosu sprzętowego $swstack = 128 ' rozmiar stosu programowego $framesize = 128 ' rozmiar ramki Do Locate 3 , 1 Lcd Ss1 ; Chr(0) ; " " Locate 3 , 10 Lcd Ss2 ; Chr(0) ; " " Locate 4...
Witam wszystkich. Mam problemik niby błahy, ale nie mogę go ogarnąć. Otóż skrobię sobie w Bascom procedurę do JEDNORAZOWEGO wykonania podprogramu. Nie mogę dać z tym rady, bo jakbym tego nie zrobił, program wykonuje mi się w pętli. [syntax=vbnet]Do If Charge_detect = 1 Then 'niepodłaczony Showpic 0 , 1 , Bat_ok flag = 1 end if if flag = 0 then flag...
Witam Mam takie pytanie.. Czy Bascom potrafi symulować przerwania od Tmerów?? Chodzi mi o to ze gdy napiszę taki program : Config Lcd = 20 * 2 Config Timer0 = Timer , Prescale = 64 Enable Interrupts Enable Timer0 Start Timer0 On Timer0 Etyk Do Loop Etyk: 'tu program obsługi przerwania return To sam nie wchodzi do obsługi przerwania. Zrobi to jedynie...
Witam Mam płytkę Loggera GPS + SD + PCF8563. Jeśli chodzi o GPS i zapis na SD wszytko jest OK. Problemem jest ( i to pierwszy raz się z czymś takim stykam ) odczyt danych z z układu PCF8563. Otóż dla pewnych wartości sekund, odczytana wartość czasu - godziny jest większa o 40 ( czterdzieści ). Czyli jeśli czas jest 22:40:02 to jest wyświetlany poprawnie,...
Witam Właśnie piszę program do sterowania diodami na dyskotekę tzn. wąż świetlny. Projekt jeszcze nie jest skończony ale niby działa i niestety pojawił się problem. Przycisk Sv1 Alias Pind.3 służy jak na razie do wyboru programu (zwiększa o jeden) Na razie jest 6 programów. Owy przycisk działa na zasadzie przerwania od przepełnienia timer0, które to...
Witam! Po napisaniu takiego programu: dim a as string * 30 do a = input() id a<>"" then print a end if loop end wysyła mi kontroler wszystko co otrzyma ale gdy cała zmienna się zapełni to więcej nic niewyła i transmisja zatrzymuje się. Jak więc czyści się zmienne typu string?
Bascom - wersja 1.11.95 Kod, no jest tego sporo: - zegar PCF8563 - Zapis na SD - dwa czujniki DHT11 - odczyt z PCF8574AP ( klawiatura ) - RC5 - ma być DS18B20 - ma być DCF77, ale nie doszedłem do tego momentu ( tzn testowałem na innym procesorze i działało ) Działa - zegar PCF8563 - dwa czujniki DHT11 - odczyt z PCF8574AP w przerwaniu ( klawiatura )...
Config Portb = &B11111111 Portb = &B00000001 Config Portd = &B0000000 Portd = &B1111111 Dim A As Byte Dim B As Byte Do B = 1 Waitms 20 B = 0 Waitms 20 B = 1 Waitms 20 B = 0 Waitms 20 return Loop do If Pind.0 = 0 Then A = 0 If Pind.1 = 0 Then A = 1 If A = 1 And B = 0 Then Portb.0 = 0 If A = 1 And B = 1 Then Portb.0 = 1 If A = 0 Then Portb.0 = 0 Return...
Witam jak w temacie mam zapętlona funkcję w Go-loop chodzi o wypełniana funkcję sterowania np ledami - leci sobie program i są 4 kanały D ale dodatkowym przyciskiem chcę ustawić stan wysoki na porcie np D5 - styl ON/OFF podkreślam że program w pętli ma działać nadal bez przerwy i resetu
cos mi chyba ten jezyk nie idzie ale na czyms uczys sie trzeba a kto pyta nie bladzi wiec:) If Portd.6 = 1 Then Wait 5 Set Portd.7 Elseif Portd.6 = 0 Then Wait 5 Reset Portd.7 End If END: Jak zrobic by nie odczekiwal Elseif Portd.6 = 0 Then Wait 5 jesli stan nie byl wczesniej If Portd.6 = 1 Then Wait 5 tylko pomijal to ( czyli jesli bylo 1 a jest...
Witam mam pytanko odnośnie programu. Chcę żeby po podaniu masy na PINC.1 na PINA.1 pojawiło się napięcie i zniknęło. ale tylko raz aż do odłączenia masy od PINC.1 co natomiast spowodować ma pojawienie się i zniknięcie napięcia na PINA.2 ale nie może sie to dziać co obrót pętli tylko raz po każdej zmianie stanu na PINC.1 Proszę poprawić tytuł wiadomości...
Witam, wyskoczył mi mały problem nie wiem co źle napisałem w tym warunku ,że nie działa jak chcę a ma działać tak po przekroczeniu Zmienej Freq , mieszcząca się między dwoma zmiennymi , a beep jest załączony cały czas czy się mieści w zakresie czy też nie [syntax=basic4gl] If Freq > Bandup Or Freq < Banddown Then Sound Pinc.0 , 200 , 1000 End...
Do odczytu stanu portu służy rejestr PIN. Czyli masz źle zrealizowane warunki w funkcji przerwania.
Przy zapisie do EEPROMU w Bascomie nie musisz wyłączać przerwań. Funkcja WRITEEEPROM robi to sama, ale READEEPROM już nie wyłącza przerwań :)
Nie masz za dużo w funkcji obsługi przerwania. Dużo Waitms i jeszcze obsługa LCD. Może przerwania tak szybko nadchodzą, że nie zdąża czasu na wyjście z niego. Funkcja przerwania powinna być krótka
Funkcja WAITMS nie jest odporna na przerwania. Jeśli masz jakieś to każde wystąpienie przerwania w trakcie WAITMS rozjedzie go. Niezależnie od stabilności tej funkcji, a nie ma powodu, żeby nie była powtarzalna jeśli nie jest przerywane wykonanie przerwaniami, to i tak lepsza praktyką będzie wykorzystanie timera.
Moze da bascom'owa funkcja uzywa timera
Witam, Magistrala 1-wire posiada dość mocne restrykcje czasowe co do trwania poszczególnych stanów na DQ. Przerwanie Timera, a wiec wykonanie podprogramu związanego z obsługa przerwania, powodowało zmianę długości tych czasów, gdyż są one generowane softwaerowo przez Bascom. Czasem może się zdarzyć że kolizja i tak wystąpi pomimo że teraz wszystko jest...
Atmega2560 posiada 256kB pamięci. Załóżmy, że program zajmie 25k, zostaje jeszcze 225kB. Zatem, Twoich "plików" wejdzie 225 / 0,72 = 312 plików po 720 bajtów. Dostęp do danych przez funkcję lookup https://avrhelp.mcselec.com/index.html?l...
A niby czemu ma program skakać do procedury obsługi przerwania od przepełnienia? Przecież on się nie przepełnia, tylko po doliczeniu do wartości OCR lub ICR , natychmiast się zeruję ( przy okazji może ,ale nie musi zmieniać stan pinu OC). Musisz uruchomić przerwanie od tego właśnie porównania - czyli od Compare, tak jak wspomniał kolega wyżej. Tylko...
Rzuciłem okiem w HELPa i funkcja "inputbin" czeka na znak, program dalej się nie wykonuje. Może lepiej użyć przerwań wykonujących się, gdy w buforze UART jest znak ?
Nie wiem konkretnie o co Ci chodzi, ale pewnie rozwiązaniem było by zastosowanie odbioru w przerwaniu co w bascomie jest niezwykle łatwe za pomocą BYTEMATCH. Mam wersje 1.11.9.0 i wspomnianego BYTEMATCH nie ma. Od ktorej wersji bascoma jest w/w funkcja? Zawsze byłem za tym, by najmniej korzystac z gotowych funkcji, a korzystac bezposrednio z rejestrów...
Tu mam jeszcze pytanie - czy mogę wykorzystać timer, do odpytania co kilka sekund o czas z rtc, co kilkadziesiąt ms o stany przycisków, co kilka sekund o temperatury? Użyj techniki opisanej [url=http://stsystem.elektroda.eu/progra... Co prawda kody są w C, ale z opisu bez problemu...
No to kawa na ławę. Instrukcja Getrc5 w czasie działania używa jest licznika TIMER0 i związanego z nim przerwania. Licznik ten jest służy do generacji wymaganych opóźnień podczas próbkowania sygnału. TIMER0 może być dalej używany przez program, lecz należy się liczyć z wynikłymi opóźnieniami, gdy wykonywana będzie funkcja GETRC5(). Jest tylko jeden...
Generalnie to twój problem wynika w dużej mierze z tego, że wywołujesz funkcję z wewnątrz przerwania. To powoduje szczególnie w Bascomie - niestety KOSMICZNE obciążenie w postaci po pierwsze ogromnego i niepotrzebnego zużycia stosu przez co musisz właśnie zacząć się bawić z tymi wszystkimi HWSTACKAMI itp .... zobaczysz jaka bonanza z tym będzie przy...
Należy: - zadeklarować zmienną globalną np. LICZNIK i nadać jej wartość zera, - włączyć przerwania od przepełnienia Timer0, - w funkcji przerwania należy zwiększać wartość zmiennej LICZNIK o jeden Aby poznać liczbę impulsów wystarczy pomnożyć LICZNIK*256 i dodać do niego aktualną wartość rejestru licznika timera, czyli jak sądzę counter0 (nie znam BASCOM).
...Jakie jest zatem rozwiązanie tego problemu (jeśli jest)? Bascomowy UART programowy działa jedynie wtedy , kiedy wywołamy funkcję z nim współpracującą. W pozostałych przypadkach ( kiedy działają funkcje/procedury nie związane z programowym UART-em ) , nadchodzące dane są "niewidoczne" dla procka :( Np. jeśli masz w kodzie Wait 1 , a w czasie działania...
Program się zawiesi bo na czas zapisu program jest zatrzymywany w pętli oczekującej na zakończenie zapisu (tak robi BASCOM a domyślam się że mówisz o BASCOMowej funkcji zapisującej a nie jakiejś własnej). Kolejne przerwania od Timera będą wywoływane tuż po poprzednim a więc program główny będzie praktycznie stał w miejscu. O zajeżdżaniu pamięci EEPROM...
Wiec tak: W ogóle wyrzuciłbym zmienna/flagę F. Nie jest potrzebna tutaj. W programie głównym zamiast sprawdzania F, sprawdzaj A, czyli warunek IF z przerwania przenieś do programu głównego, łącznie z zerowaniem A. W przerwaniu zwiększaj tylko A. Zamiast: If F = 1 Then Cls Locate 2 , 1 Lcd "przerwanie" Wait 1 Cls F = 0 Enable Int0 End If zrobilbym...
rozne serwa roznie moga dzialac. Nigdzie nie widzialem, zeby ktos okreslil dokladna czestotliwosc z jaka to ma byc robione.. zazwyczaj jest ok. 50Hz. Drobne roznice typu kilka Hz (czyli kilka ms wywolywanie przerwania) nie powinny miec zadnego wplywu na serwo. Problem moze sie zaczac jak bedziesz mial dlugie funkcje wywolywane przerwaniami... ale na...
Czy to jest przerwanie czy odwołanie się do podprogramu? Jeśli przerwanie- to jakie zdarzenie je wywołuje? Po co w przerwaniu- jeśli jest to przerwanie- blokujesz przerwanie od przepełnienia Timera? Przecież i tak jest zablokowane. Funkcja jest zdeklarowana?
Przyciski - DEBOUNCE Odliczanie - CONFIG TIMER i przerwania.
W celu eliminacji drgań styków należy użyć przerwania licznika, by odczytywać stan przycisku tylko raz na około 10 ms . Nie używamy funkcji Debounce i delay_ms ! Czy przycisk został naciśnięty sprawdzamy w zmiennej globalnej dostępnej w programie głównym.
Kolego Balu , Nie neguje rozwiązania krańcówek na przerwaniach ale co przemawia za tym by właśnie zrobić to na krańcówkach a nie zostawić tak jak jest? Program przecież zajmuje się tyko obsługą bramy, nie ma innych funkcji. Pewnie ilu użytkowników tego forum , tyle było by rozwiązań, mnie interesuje Twoje, dlaczego tak? Pozdrawiam Malcik
Najważniejsze zadania "czasu rzeczywistego" można wykonywać w obsłudze przerwania timera. Usługi można wpisać w podprogramy (z jez C: funkcje) i w pętli głównej wybierac które mają byc wykonywane. Komunikacje z uzytkownikiem mozna na ogół wpisać w pętli głównej, gdyz ona zwykle jest potrzebna do podania danych przed wykonianiem zadania, lub po czyli...
Akurat takich mam dostatek, jednak nie bardzo rozumiem, jak wykożystac sprzętową obsługę w bascomie W helpie jest opisana funkcja ENCODER(), zatem może warto najpierw te parę zdań przeczytać? W obsłudze przerwania sprawdzasz stan wejść i porównujesz z poprzednim stanem Nie zapominajmy o drganiu styków. Jeszcze nie spotkałem enkodera mechanicznego,...
Ileż się naszukałem w User Manualu co odpowiada za globalne włączenie przerwań w LPC2478. I okazało się że chyba nic. Po prostu to wymysł Keila ta funkcja. W User Manualu tego nie znajdziesz, tak samo jak szczegółów dotyczących przerwań, instrukcji assemblera itp. Dlaczego? Dlatego, że to są rzeczy specyficzne dla RDZENIA tego mikrokontrolera - rdznia...
Nigdy nie korzystałem z Getkbd, bo nie miałem takiej potrzeby, ale nie sądzę aby nie można było skorzystać z tej instrukcji w przerwaniu. W końcu nie są tu angażowane żadne timery, ani zaplanowane opóźnienia - po prostu zapis do portów i odczyt.
Witam, daj sobie spokój z takim dziwnym skracaniem kodu bo zwykle w takich przypadkach wyłożysz się na plecy i długo będziesz szukał błędu. Po pierwsze - tym GoSub-em chcesz skakać do procedury obsługi przerwania, która wprawdzie w Bascomie kończy się dla programisty podobnie jak np zakończenie podprogramu bo rozkazem "Return" - ale to nie to samo w...
można można... tylko z rozwagą:> I chyba nie polecam tego koledze na chwilę obecną:> (Ale jakby co wystarczy włączyć ponownie przerwania globalne...).
Ja miewałem takie problemy i zawsze problem wynikał z mojej winy. Ja dysponuję debugerem więc ze zlokalizowaniem przyczyny nie miałem większego problemu. Przyczyn może być dużo, niezainicjowane wskaźniki, niewłaściwe indeksy, rzutowania, braki sufiksów na stałych, niewłaściwe wektory przerwań itp itd. Kod który przedstawiłeś nie jest cały to tylko funkcja...
Moim zdaniem koncepcja powinna być taka: 1. Obsługa przetwornika analog-cyfra. Na początek dobrze żebyś umiał dobrze zmierzyć liczbę impulsów. Nie wiem dokładnie jaka jest specyfika Twojego sygnału, jaką amplitudę mają owe szumy, skąd się biorą i czy nie warto by ich po prostu potraktować filtrem dolnoprzepustowym, a jeśli mają odpowiednio niską amplitudę...
Zgodnie z obietnicą wstawię kod programu w języku Bascom. Wiem że jest w nim wiele błędów i moich złych nawyków choćby brak przerwań, funkcji, itp.
w przerwaniu nigdy nie wykonuje się funkcji wait itp. :!:
blokuje się bo funkcja spiin jest chyba blokująca Nie chyba a na pewno. Że też na to nie wpadłem :-( W C nie byłoby problemu sprawdzić jak działa taki "spiin", w Bascim, cóż :-( W HELP niewiele napisali ale po analizie przykładów można wywnioskować, że jest blokująca. Czeka na zadaną liczbę znaków i zapisuje do tablicy. Program będzie wisiał dopóki...
Witam czas późnienia wprowadzany przez instrukcje "wait" w Bascom-ie zależy ściśle od częstotliwości rezonatora kwarcowego. Jeśli chcesz dokładnie odmierzyć upływ czasu i wykonać jakąś instrukcję to proponuję zrobić to w funkcji przerwania dla Timer-a Pozdrawiam
przerwaniu bascom bascom timer przerwaniu bascom przycisk przerwaniu
autocom jedno karta pamięci uszkodzona 65535 internal control
przekaźnik pompy paliwa renault tester rezonatorów kwarcowych
Czy słuchawka bezprzewodowa musi być w uchu? Beko washing machine Flash program: Quick cycle, flashing LEDs, firmware reflash explained