Disable Interrupts 1wreset Enable Interrupts Disable Interrupts 1wwrite &HCC Enable Interrupts Disable Interrupts 1wwrite &H44 Enable Interrupts Waitms 750 'czas konwersji 750 ms Disable Interrupts 1wreset Enable Interrupts Disable Interrupts 1wwrite &HCC Enable Interrupts Disable Interrupts 1wwrite &HBE Enable Interrupts Najgorzej to z tym: T(1)...
Najprościej - przed komunikacją z termometrem daj Disable Interrupts, a po komunikacji Enable Interrupts.
To o co pytasz nie zależy od Bascoma, tylko od architektury procesora. AVRy po przyjęciu przerwania blokują wszystkie przerwania (z wyjątkiem XMEGA, które mają przerwania wielopoziomowe i NMI). Tak więc sam nigdy nie musisz w handlerze przerwania ich blokować. Pytanie, kiedy je odblokowywać przed zakończeniem obsługi. W kilku sytuacjach, np.: 1. Kiedy...
A czy to też nie działa : Config Watchdog = 16 Start Watchdog Disable Interrupts być może Bascom odblokowuje przerwania w starcie watchdoga?
Żeby być pewnym na 100% to jak odczytać temperaturę z 2 czujników DS18B20? pierwszy czujnik: 1wreset 1wwrite &H55 1wverify ID pierwszego układu 1wwrite &HBE odczekać czas na pomiar temperatura1 = 1wread(2) drugi czujnik 1wreset 1wwrite &H55 1wverify ID drugiego układu 1wwrite &HBE odczekać czas na pomiar temperatura2 = 1wread(2) Czy coś jeszcze trzeba?...
...Dałem polecenie debounce i powinno zwiększyć zmienną o 1 i poczekać do puszczenia przycisku, ale nawet szybkie naciśnięcie zwiększa zmienną o kilkadziesiąt jednostek. Może chodzi o przerwania? Może to być "sprawka" przerywań, proponuję na początek: [syntax=basic4gl]Klik: Disable interrupts Incr Bsend If Bsend = 100 Then Bsend = 0 Enable Interrupts...
$regfile = "m8def.dat" Config Pind.6 = Input Config Pinb.5 = Output Config Pinc.0 = Output Config Int0 = low level Config Int1 = low level Dim A As Byte A = 0 Declare Sub Lewo Declare Sub Prawo Declare Sub Zatrzymaj1 Declare Sub Zatrzymaj2 Radio Alias Pind.6 Enable Interrupts ' zezwolenie na obsługę przerwań Enable Int0 Enable Int1 On Int0...
...Napisalem sobie taki program: To go szybko usuń z dysku i zapomnij że wogóle takie coś napisałeś :( Config Portb = &B00101010 Portb = &B00101010 Dim K As String * 1 Dim B As String * 1 Getkey: Do Disable Interrupts If Pinb.2 = 1 And Pinb.3 = 1 Then Po co sprawdzasz czy Pinb.3=1 , skoro sam ustawiłeś na nim wysoki stan :?: I dalej.Pinb.2...
Na początek: Sub Obliczenia_temp() '---------------------------------------... ' BLOK 1 - rozpoczecie pomiaru i konwesja temperatury '---------------------------------------... If Flaga_ds1 = 1 Then Flaga_ds1 = 0 Disable Interrupts ' wyłaczam przerwanie na czas wysyłania 1wreset 1wwrite &HCC ' odczyt z pominieciem identyfikacji...
Spróbuj tak: Menu: Disable Int0 Disable Int1 Enable Interrupts Cls
Przeniosłem zalecenie (at)insmod do OBK, ale nie podłączyłem jeszcze kodu "disable interrupts". Nie jest on nigdzie podlinkowany, ale kompiluje się: https://github.com/openshwprojects/OpenB... Oczywiście to nic nie znaczy, to ledwie najprostszy krok, ale przynajmniej kod jest.
A spróbuj tak: [syntax=basic4gl] ' Fuse bity ustawione fabrycznie $regfile = "m8def.dat" $crystal = 1000000 Config Portb = Output 'sterowanie segmentów LED Config Portd = Output 'sterowanie segmentów LED Config 1wire = Portc.5 Anoda1 Alias Portc.1 ' Lewy wyświetlacz Anoda2 Alias Portc.2 Anoda3 Alias Portc.3 Dim Nr_wysw As Byte Dim Liczba As Long Dim...
Ja bym dał Disable Interrupts i Enable Interrupts pomiędzy wszystkimi operacjami 1Wire: [syntax=basic4gl]Sub Inicjowanie_ds: Disable Interrupts 1wreset Enable Interrupts Disable Interrupts 1wwrite &HCC ' &H CC skip rom Enable Interrupts Disable Interrupts 1wwrite &H44 ' &H 44 convert T Enable Interrupts End Sub[/syntax]
Na początek każdą instrukcję od 1Wire obuduj takim czymś: [syntax=basic4gl] Disable Interrupts 1wreset 'Reset magistrali 1wire. Enable Interrupts Disable Interrupts 1wwrite &HCC Enable Interrupts ...[/syntax]
Czyli jest maly postęp. Sprubujmy takiej przeróbki: Pob_rc5: Disable Int0 Disable Timer1 Enable Interrupts Getrc5(address , Command) Enable Timer1 Command = Command And &B01111111 Set Odebrany_kod Return Ciekawe co zrobi. Chyba że jest błąd w książce.
Zapomniałeś jeszcze o tym: [syntax=basic4gl]100ms: Disable Timer0 '<-To Enable Interrupts ... ... ... Disable Interrupts Enable Timer0 '<-To[/syntax]
Powiem Ci, że nie wiem po co tak ma być, ale podam Ci mój kod. [syntax=basic4gl]Rc5get: Disable Int0 Enable Interrupts Set Rc5flag Return[/syntax] Zamiast ustawiania flagi można dać odbiór kodu. Ale ja wolę to robić w pętli. Nie wiem tylko po co to Enable Interrupts skoro jest ustawione na początku programu, ale bez tego nie działa.
Dziwna sprawa. Okazało się, że winne błędom wyświetlania było przerwanie od timer3, ale co bardzo dziwne, wyłączenie (na czas wyświetlania) przerwań poprzez DISABLE/ENABLE INTERRUPTS nie pomaga, a wyłączenie przez DISABLE/ENABLE TIMER3 - pomaga. Czyli jak to - DISABLE INTERRUPTS nie działa ? A może - nie działa "od razu", czy jak ? Bardzo to dziwne.
No walczę z tym wysyłaniem danych i zero efektów. Przykładowa ramka wysyłana: 0226FFF41B66008002185719 for (int i = 0; i < 12; i++) { size_t ret = writeByte(aa[i]); } #define WAIT { while (ESP.getCycleCount()-start < wait); wait += bitTime; } size_t writeByte(uint8_t b) { // Disable interrupts in order to get a clean transmit cli(); unsigned long...
Na początku procedury przetwornika dodałem Disable Interrupts, a na końcu Enable Interrupts jednak nic to nie zmienia dalej zegar się zatrzymuje.
Skoro program utyka w jakimś miejscu to znaczy że czekasz w pollingu na stan, który się nie pojawia. Po pierwsze dodałbym time out, który przerwie pętlę oczekiwania zanim układ zostanie zresetowany przez watchdog. Zapis nie jest w pętli, struktura programu wygląda tak: Skoro na magistrali nie ma innego mastera to należałoby wysłać ponowny warunek startu....
To ja dodam że na trochę większym procesorze, powiedzmy ATMega8, można spokojnie odpalić z 10 niezależnych wątków. W BASCOMie!!! PS. Więcej jak i mniej również, ale 10 to taka optymalna liczba powiedzmy. Ale taka wielowątkowość nakłada pewnie ograniczenia. Najlepiej nie używać przerwań, oraz nie używać pinów bezpośrednio za pomocą instrukcji In, Out....
W kwestii formalnej: Adding: Disable Interrupts tutaj disable interrupts Sobie daruj... i tak nic nie zmienia... Teraz tak, nie obrażaj Pan bascoma bo na nim robią ludzie na prawdę poważne projekty... a to jest żart a nie projekt :) Dalej, nie pisałeś nigdzie jakim poziomem sterujesz przycisk, masz gdzieś usuwanie drgań sprzętowe? Jak nie to zrób softwareowe.......
Witam Podlaczylem dwa microswiche do Int0 i int1 i masy i probuje taki programik na zwiekasznie i zmniejszanie zmiennej, lecz procesor nie reaguje na przyciski, dlaczego? $regfile = "2313def.dat" $crystal = 8000000 Dim Z As Byte Config Int1 = Low Level Config Int0 = Low Level Config Lcd = 16 * 1a ' konfiguacja wyświetlacza Lcd Enable Interrupts...
Rzuciłem okien na kod i nie znalazłem w procedurze wyświeltlania po I2C "DISABLE INTERRUPTS". Powinno pomóc. Możesz też wyłączać tylko INT0 lub INT1. Pamiętaj tylko by je potem włączyć po zakończeniu wyświetlania ("ENABLE INTERRUPTS").
Niestety tak drastyczne zmniejszenie częstotliwości multipleksowania powoduje migotanie o wiele gorsze. Trzeba chyba podzielić obecny odczyt na części aby czas ich wykonania zmieścił się w 4ms Jest już lepiej ale stratę tej 1ms da się jeszcze zauważyć. Ale pomysłu na dalszy podział już nie mam. Można jeszcze podzielić na elementarne podkomendy ale...
Poprawiłem obliczenia pojedynczej cyfry lecz w zaznaczonej linijce w pierwszym okienku z fragmentem kodu wykrzyknikami, pojawia się błąd i nie wiem dlaczego zmienna Znak jest zdeklarowana w ten sposób: Dim Znak as Bit a pojawia się komunikat: error:105 StoreBit error [0] A co z tymi przerwaniami bo do końca nie mogę tego złapać są tak jak powinny być...
Znaczy tak: Dim Linia As Byte If Ucase(linia) = "AT+RST?" Then Disable Interrupts Config Watchdog = 16 Start Watchdog Do Loop End If
noga 16 procka: rezystor 4,7kilooma do zasilania, guzik do masy noga 17 to samo. do programu dopisz na początku po deklaracjach zmiennych: Enable Interrupts Enable Int0 Enable int1 On Int0 ustaw on int1 zeruj na końcu wstaw: ustaw: Disable Interrupts ht = h mt = m st =s t = 1 Waitms 200 Enable Interrupts Return zeruj: Disable Interrupts ht =...
Zastanawiam się, jak się odbywa zapis zmiennej 16 bitowej w procesorze 8 bitowym. Najpewniej najpierw przepisywana jest pierwsza połowa, następnie druga. A czy możliwe jest, żeby jeśli przerwanie wystąpi równo w tym momencie i będzie chciało odczytać wartość tej zmiennej to odczyta pierwszą połowę nową, a drugą starą? czyli jeśli a=0000 zmieniam na...
3. Nie trzeba modyfikować płytki w celu uzyskania efektu odłączenia USB. Wystarczy zaprogramować linię D+ jako wyjście GPIO i podać stan 0 (wyłączając USB), a potem z powrotem włączyć USB (odcinając w ten sposób funkcję GPIO). Dyskusję na ten temat znajdziesz na stm32duino.com. W ten chyba właśnie sposób V-USB działa na AVR, z tą różnicą, że na D-...
Wyłączyłeś przerwania za pomocą disable interrupts, a włączyłeś je jakoś później ? Zadeklarowałeś timer na początku programu i co dalej z nim ? Wykorzystujesz go jakoś ? Dajesz jakieś opóźnienie dla czujnika temperatury ? Samo przełączanie zmiennej chyba nie wystarczy. Domyślam się, ze chciałeś użyć timera do tego ?
Disable Interrupts Call Gettime Enable Interrupts Jeżeli funkcja Gettime trwa zbyt długo to gubisz przerwania od timera. Jak zmieniłeś preskaler, to masz przerwania co 8ms i pewnie już się wyrabia. Co takiego robi w Bascom Gettime, że trzeba wyłączać przerwania?
w jaki sposób wykonuje się skok do pamięci bootloader'a? Na przykład tak (niezbyt elegancko...): Befor jumping to Bootloader user must : • Disable all peripheral clocks • Disable used PLL • Disable interrupts • Clear pending interrupts
Może być że przerwanie od Timera pojawia się podczas wpisywania czegoś na wyświetlacz w związku z czym do lcd wysyłane są błędne dane. Możesz spróbować dać przed każdym wywołanie "LCD ... " dać DISABLE INTERRUPTS a zaraz po "LCD..." ENABLE INTERRUPTS po to aby wyłączyć przerwania tuż przed wysłaniem danych do LCD.
ZbeeGin wielkie dzięki. Teraz dziala. Jak stosuje Stop i Start timer to rzeczywiście wpisuje inną wartość do TCCR0. Ale wystarczą mi enable i disable interrupts. Ciekawe czy Mark zareaguje coś na ten bląd. Wczoraj zainstalowalem najnowszą wersję Bascom AVR 1.11.9.2 i blad w tej wersji tez występuje.
Na ARM Info center znalazłem tylko coś takiego: Operation CPS changes the PRIMASK and FAULTMASK special register values. See Exception mask registers for more information about these registers. Restrictions The restrictions are: use CPS only from privileged software, it has no effect if used in unprivileged software CPS cannot be conditional and so...
Mam taki program w obu mikroprocesorach różniący się jedynie tym, że jeden z nich na początku ma włączony globalne przerwania a drugi nie. Dodatkowo PORTD.0 (RXD) jest zwarty z PORTD.1 (TXD) w obu uc i połączony jednym przewodem. $regfile = "m8def.dat" $crystal = 8000000 $baud = 38400 Config Portc = Output Portc = 0 Config Portb = Output Portb...
Udało się rozwiązać problem :) Zrobiłem to tak: [syntax=basic4gl]If Autoret > 0 Then Ust = 1 Decr Autoret If Autoret = 0 Then Gosub Zapis End If Else Ust = 0 End If[/syntax] [syntax=basic4gl]Zapis: Disable Interrupts Writeeeprom Tu , 35 Portd = &B11111111 Waitms 200 Enable Interrupts Return[/syntax]
$regfile = "m8def.dat" $crystal = 1000000 Config Pinc.0 = Output Config Pinc.5 = Output Dioda1 Alias Portc.0 Dioda2 Alias Portc.5 Config Int1 = Low Level Config Rc5 = Pind.2 On Int1 Przzew0 Dim Komenda As Byte , Adres As Byte Dim Odebrano As Bit Enable Interrupts Enable Int1 Do If Odebrano = 1 Then If Adres = 0 Then 'pilot o adresie 0 toggle...
Coś świruje mi odczyt temperatury na T2. Co chwile weryfikacja jest niepoprawna. wiec widzę ze nie ma odczytu i spadek temp o połowę. Dodano po 2 Naprawione ;) Po zwiększeniu ilości przerwań i czasu co ile jest wywoływane natrafiało ono na odczyt temperatury. Disable interrupts podczas pomiaru i przeliczeń i jest już dobrze ;) Chyba, że jest jakiś inny...
Radziłbym także zastosować się do prawidłowego pobierania wartości z TCNT1. W dokumentacji jest zalecane: unsigned int TIM16_ReadTCNT1( void ) { unsigned char sreg; unsigned int i; /* Save Global Interrupt Flag */ sreg = SREG; /* Disable interrupts */ _CLI(); /* Read TCNT1 into i */ i = TCNT1; /* Restore Global Interrupt Flag */...
Dorzucam wersję z porządnym debouncingiem. Ten z BASCOMa jest zbyt uproszczony i nie nadaje się do profesjonalnych zastosowań. Po wciśnięciu jednego przycisku naciśnięcia innych przycisków są ignorowane do czasu puszczenia tego pierwszego. Zauważ autorze, że nie ma już nigdzie w kodzie czekania na cokolwiek (brak wywołań funkcji WaitMs()). Wszystko...
Dzień dobry Od dwóch dni walczę z obsługą TIMERA1 na Atmega2560 w przerwaniu external INT0. Na wejściu INT0 mierzę krótkie pakiety danych, cały jeden pakiet ma ok 8ms, gdzie najkrótszy bit ma ok. 40us Timer1 mam ustawiony na preskaler 8 (2Mhz), wejście INT0 mam ustawione na zbocze "Any" liczenie zaczynam od TIMERA1 = 0 W przerwaniu INT0 pobieram aktualną...
A ja się tak dalej zastanawiam i zasugeruje Ci też inny sposób sprawdzenia. Tu będziesz miał możliwość porównania dokładności obliczeń na danych. Spróbuj może tak: Zamiast kodu: Sub Termo Disable Interrupts 1wreset 1wwrite &HCC 1wwrite &HBE Odczyt(1) = 1wread(2) T = Makeint(odczyt(1) , Odczyt(2)) If T...
Witam, moim zdaniem to tylko przypadek, że nie zauważyłeś błędu i wydaje Ci się że program działa poprawnie, może za krótko obserwowałeś? Uważam (jak wykazały moje perypetie z DS'ami) że, dopiero zablokowanie wywołania przerwania, a można użyć Stop lub Disable, gwarantuje poprawność każdego odczytu z DS'a, o ile nie ma zakłóceń na przewodach. Tak jak...
Myślę,że na elektrodzie z 90% przykładowych kodów do obsługi ds18x20 pod bascoma korzysta z waitms. Niezależnie od ilości czujników. Sam mam urządzenie do opomiarowania kotła CO w którym jest 5 dsów, transmisja przez sprzętowy uart z sim300 i przez programowy uart z btm222. Wykorzystuję tam też dwa timery do obsługi alarmów i podświetlenia lcd, a w...
A dlaczego na próbę nie ustawisz tego Timeta0 na wartość np. 128? Czyli mniejszą niż 1023 jak i mniejszą niż 255. Żebyś miał prościej, gotowiec: [syntax=vbnet]Co_jakis_czas: 'definiujemy procedurę odmierzającą mniej więcej 4s 'i wywołującą odpowiednie funkcje Stop Timer0 'Disable Interrupts 'to ma byc zakomentowane bo i tak w tym miejscu nie ma sensu...
smalski->O priorytecie przerwań w AVR-ach , można powiedziec tak , że im niższy(mniejszy) adres wektora , tym wyższy priorytet posiada dane przerwanie. Celetron-> Żeby zablokować wszystkie przerwania na czas wykonywania przerwania od np.T1 trzeba postąpić jak poniżej: On Timer1 EtykietaT1 , NOSAVE ... EtykietaT1: Disable Interrupts 'co kompilator...
Jeżeli chcesz wyłączyć wszystko to wyłącz całe zasilanie zwykłym wyłącznikiem , jeżeli chcesz użyć do tego procesora , to po naciśnięciu przycisku robisz pwm=0 i może do tego disable interrupts . Procesor leci cały czas w krótkiej pętli i sprawdza czy przycisk został powtórnie naciśnięty , ale wtedy musi mieć cały czas zasilanie. Jest jeszcze chyba...
Przecież pisałem ci aby Getrc5 dać w przerwaniu, eeeh, no kolego - weź no użyj troszkę szukajki na elektrodzie chociażby. Int1_rc5: Disable Int1 Enable Interrupts If Ir_flag = 0 Then Getrc5(address , Command) Ir_flag = 1 End If Return a potem w pętli głównej: Do if Ir_flag = 1 then Ir_flag = 0 If Address < 255 then ..... tutaj dalej obrabiasz...
I może troche głupie pytanie ale myśle nad tym już troche czasu i nic nie moge wymyślić a dokładniej jak procerura Do 'set up a 1 sec accurate DO NOTHING loop Enable Interrupts 'wait 1 as per BASCOM-51 is not accurate For Delayword = 1 To 45440 Next Delayword Disable Interrupts dla mikrokontrolera AT89C2051 z kwarcem 24MHz odlicza dokładnie 1 sekunde?Znalazłem...
W zasadzie kodu takiego, co bez przeróbek zadziała to nie mam - każdy fragment ma różne zależności zdefiniowane w innych plikach/procedurach. Ale dla przykładu mogę wrzucić jedną prostą maszynę stanów - część rzeczy można wykomentować, stworzyć jakieś swoje fikcyjne zmienne, itp... [syntax=c] //======================================...
[syntax=c] //======================================... case 2: // wygenerowanie liczby slownej odp. dz. tysiecy //--------------------------------------... DISABLE_INTERRUPTS; // disable interrupts (atomic access) WAVE_FileBytesCtr = WAVE_FileSize; //koniec odtwarzania pliku...
Oczywiście wszystkie przerwania maja wpływ na programowy UART. Nie wiem co Ci tam przeszkadza. Już chociażby buforowany UART jest na przerwaniach. Kiedy więc ESP jeszcze coś tam dosyła to już może bruździć. Jeśli Ci na tych dosyłanych potem danych nie zależy to możesz, zamiast globalnego Disable Interrupts, wyłączać poszczególne przerwania aż dojdziesz...
Witam Zasiadłem do BASCOMa AVR i poczyniłem zawiły ale zadowalajacy (jak na to srodowisko) soft dla atmega8, wszystko byloby ok gdyby nie mały problem z obsługą przerwania... mianowicie, na jedno z wejść tj. INT0 podaje przebieg prostokątny, okres 20ms, w aplikacji wymagane jest aby w chwili gdy wystąpi zbocze opadające owego przebiegu (dopiero od pewnego...
Na przerwaniach zewnętrznych będzie enkoder i to wiem jak wykonać, a jak zrobić Jeżeli użyjesz funkcji millis() w pętli loop(), to pamiętaj że funkcja ta blokuje na chwilę przerwania w trakcie swojego działania. Zbyt duża częstotliwość jej użycia w pętli loop() może spowodować zakłócenia w odczycie enkodera. [syntax=c] unsigned long millis() { unsigned...
Ja również miałem problem z multiplesowaniem wyświetlaczy i jednoczesnym odczytem 1wire. Pomysł z wyłaczeniem przerwań od timera na czas transmisji 1wire okazał się prawidłowy. Ponieważ w trakcie pomiaru świeci się jeden wyświetlacz aby efekt był nie zauważalny możemy dokonywać pomiaru temeperatury rzadziej. Oto mój programik : $regfile = "m8def.dat"...
Nie ma problemu! Na następny raz: 1. Wstaw "loop" wcześniej w kodzie - w ten sposób zawęzisz krąg poszukiwań, 2. Zaremuj wszystko to, co nie jest konieczne - watchdogi, timery itp. 3. Wyłącz przerwania (cli lub disable interrupts), 4. Zawężaj program do procedur które nie działają, a po rozwiązaniu problemu dopisuj resztę, za każdym razem testując działanie...
A mi się tak coś wydaje, że BASCOM potrzebuje polecenia END, aby działał poprawnie - inaczej nie wiadomo do czego jest zdolny :) Zgadzam się z Tobą - wydaje Ci się :D Instrukcja END , jest odpowiednikiem takich instrukcji: ---- Basic ---- Disable Interrupts End: Goto End --- lub w assemblerze --- Cli End: Rjmp End Nie radzę więc nikomu , by...
Tak się zastanawiam, czy to nie powinno działać?: [syntax=basic4gl]Rc5: Disable Int0 ' wyłącz przerwanie INT0 Gifr.intf0 = 1 ' skasuj żądanie przerwania z INT0, UWAGA!!! to nie jest błąd, żeby zgasić ten bit należy wpisać 1 Enable Interrupts ' SEI Getrc5(adres , Kod) If Adres = 0 Then Kod = Kod And &B01111111 End If Set Flaga Disable Interrupts ' CLI...
Zamieszczam przyklad programu napisanego na kolanie, zmienia stan lini PC3 co okolo (LicznikMax*10ms ) - wychodzi co ok. 100 ms Gdybyś miał wątpliwości to podniosłem moje kości z krzesła przed komputerem po płytkę z AtMega32 i sprawdziłem w ukladzie - DZIAŁA! Kompilowany pod ICC626, polecam "Wizarda" ,pomaga w minute ustawić co potrzeba bez sięgania...
Mam z tym taki mały problemik :) Otóż wcześniej stosowałem przeliczanie z dodanym T = makebcd(t) po T = T /10 i temperatura była zawyżana ale wyświetlana dobrze na wyświetlaczach. Gdy osunąłem ten wpis temperatura jest rzeczywista, ale powyżej 20st tylko liczba po przecinku jest wyświetlana ok, natomiast dziesiątki zostają 1 a jedności wariują. Coś...
[syntax=c]Czy ktoś może podesłać informację jak skasować watchdoga w ATXmega128A4? Kod wygenerowany w CodevisionAVR do inicjalizacji: // Watchdog Timer initialization void watchdog_init(void) { unsigned char s,n; // Optimize for speed #pragma optsize- // Save interrupts enabled/disabled state s=SREG; // Disable interrupts #asm("cli") // Watchdog Timer:...
Nie to sprawdzałem. Wygląda to jakby procedury odczytu DS-a działały bo ta temperatura wyświetlana -0.1 o tym świadczy. DS jest zasilany z 3,3V i wyczytałem że przy takim zasilaniu rezystor podciągający linie DQ ma mieć około 2k i taki mam. Ale z rezystorem 4,7k też nie działało. Gdzie to wyczytałeś? Datasheet nic na ten temat nie mówi, poza "Can be...
Witaj. Ja też kiedyś zrobiłem podobny komputerek i pracuje nieźle, choć nie mia tak wielu funkcji. Wydaje mi się że powinieneś liczyć impulsy wtrysku w przerwaniu bo to zapewnia prawidłowe liczenie. Mój jest na Atmedze8. Ja impulsy z jednego wtrysku liczę w przerwaniu od INT0 a funkcja wygląda tak: [syntax=basic4gl][/syntax] Obsluga_int0: 'Przerwanie...
Taki kod też mi nie działa: Tzn. Robot jedzie do przodu ale załączenie krańcówki nic nie powoduje. $regfile = "m8def.dat" $crystal = 8000000 Config Portb.0 = Output 'dioda Config Portd.7 = Output 'silnik lewy 1 Config Portd.6 = Output 'silnik lewy 2 Config Portb.5 = Output 'silnik prawy 2 Config Portb.4 = Output 'silnik prawy 1 Enable Interrupts...
One wire działa bezbłędnie na innych pinach. [syntax=c] uint8_t one_wire_reset(void) { uint8_t present = 0; cli(); //Disable global interrupts ONE_WIRE_LO; //Delay 500us _delay_us(160); _delay_us(160); _delay_us(180); ONE_WIRE_HI; _delay_us(75); present = (ONE_WIRE_PORT & (1 << ONE_WIRE_PIN)); //Delay 405us _delay_us(100); _delay_us(100);...
Już działa!!! ;) ,a przynajmniej osiągnąłem zamierzony efekt. [syntax=basic4gl]$regfile = "attiny2313.dat" 'wybór procesora attiny2313 $crystal = 8000000 Config Pinb.1 = Output 'buzzer mający piknąć 3 razy po odmierzeniu czasu nop Buzzer Alias Pinb.1 Dim Sekundy As Byte Dim Minuty As Byte Sekundy = 0 Minuty = 0 Buzzer = 1 Config Timer1 = Timer , Prescale...
Albo nie doczytałeś, albo (jak zwykle(!)) - nie zrozumiałes całości fragmentu... Przeciez pisałem w twoim języku, ze nie chodzi o sam odczyt, lecz o funkcję millis(). Raczej Ty nie doczytałes w funkcji milis nie za bardzo jest co przerwać a wyglada ona tak: [syntax=c]unsigned long millis() { unsigned long m; uint8_t oldSREG = SREG; // disable interrupts...
1. Disable the Timer/Counter2 interrupts by clearing OCIE2 and TOIE2. 2. Select clock source by setting AS2 as appropriate. 3. Write new values to TCNT2, OCR2, and TCCR2. 4. To switch to asynchronous operation: Wait for TCN2UB, OCR2UB, and TCR2UB. 5. Clear the Timer/Counter2 Interrupt Flags. 6. Enable interrupts, if needed. DS pod tym względem trochę...
tak wpisałem i nic, ale coś mi nie pasuje no bo powerdown bardzo niedokładnie chodzi powinien wyłączać po ok. 15-20s a wyłacza po 2-4s Incr Power_down If Power_down = 200000 Then ' czas zwłoki dla powerdown Portb.3 = 1 Portb.0 = 1 Portd.0 = 1 Portd.1 = 1 Portd.2 = 1 Portd.3 = 1 Portd.4 = 1 Portd.5 = 1 Portd.6 = 1 Disable Interrupts Powerdown End If...
po co to: Enable Interrupts Wait 1 Disable Interrupts ?? warto dac tez czas ok 750ms na konwersje dsowi ja polecam cos takiego Dim Odczyt(2) As Byte , T As Integer , Tt As Single , Napis As String * 5 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 750 1wreset 1wwrite &HCC 1wwrite &HBE Odczyt(1) = 1wread(2) T = Odczyt(2) Shift T , Left , 8 Tt = T + Odczyt(1)...
Mam w projekcie Atmegę128 + PCF8583 + kilka układów I2C (3xADS1110, AT24c1024), dodatkowo dołaczam dwa moduły z Atmega64 każdy. Chcę, aby każdy z mikrokontrolerów odczytywał czas bezpośrednio z PCF8583. Teoretycznie arbitraż jest możliwy, ale u mnie to nie chce prawidłowo działać - zawiesza się komunikacja i programy "stoją". Do testów zostawiłem w...
Jeszcze jedno pytanko timer 2 dla transmisji szeregowej? Wszędzie opsiane jest jak wykorzystac do tego timer 0 lub 1, ale ja musze timer 2 void SER_setbaud() { /* disable interrupts */ ES = 0; /* Clear interrupt flag and buffer */ TI = 0; TxInChar = 0; TxOutChar = 0; /* transmitter is disabled */ TxEnabled = 0; /* Set timer 2 up as a baud...
Witam Mam taki kawałek kodu : ... ... ... Declare Sub Odczyt_z_eproma(byval Zapis As Byte , Byval Odczyt As Byte) ... ... ... Call Odczyt_z_eproma(174 , 175) Sub Odczyt_z_eproma(byval Zapis As Byte , Byval Odczyt As Byte) Disable Interrupts I2cstart I2cwbyte Zapis I2cwbyte 0 I2cstart I2cwbyte Odczyt I2crbyte S_bajt , Ack I2crbyte...
Enable Timer1 oczywiście też musi być. I globalne Enable Interrupts. Ale Disable Timer1 nie jest potrzebne.
Panowie prawdopodobnie znalazłem przyczynę dziwnych zachowań sterownika. Nie chcę jeszcze zapeszać że to na 100% to ale Zerknijcie na tą linię kodu i powiedzcie czy może to być przyczyną: [syntax=basic4gl]If Minuty = 0 Or Minuty = 10 Or Minuty = 20 Or Minuty = 30 Or Minuty = 40 Or Minuty = 50 And Sekundy = 0 Then 'zapis na karte SD co 10 minut temperatur...
Jeśli WD ma być "tylko" do budzenia to się zgodzę. Przyzwyczaiłem się WD zostawiać sobie też dla bezpieczeństwa aplikacji. If WDE is set, the Watchdog Timer is in Interrupt and System Reset Mode. The first time-out in the Watchdog Timer will set WDIF. Executing the corresponding interrupt vector will clear WDIE and WDIF automatically by hardware (the...
Swoją drogą do czego one służą. Fajnie, że pytasz :) Te 2 linijki służą do wyłączenia interfejsu JTAG z poziomu programu. Dlatego są 2 razy, bo aby wyłączyć interfejs JTAG należy 2 krotnie zapisać wartość 1 do bitu JTD w rejestrze MCUCSR w przeciągu 4 cykli zegara (po szczegóły odsyłam do dokumentacji). Gdybyś używał w programie przerwań to przed tymi...
Ja to robię tak jak w kodzie poniżej. Od razu jest zabezpieczenie przed błędnym odczytem klucza np. gdy pastylke szybciej odłączymy niż procek zdąży ja odczytać. Często się zdarza ze odczytane zastają pierwsze bity a reszta to FF w układzie daje rezystor podciągający 4.7K Sub Odczyt Disable Interrupts Odczyt_poprawny = 0 1wreset Waitms 50 1wreset If...
Config 1wire = Portb.2 ... ... ... Sub Termo Disable Interrupts 1wreset 1wwrite &HCC 1wwrite &HBE Odczyt(1) = 1wread(2) T = Makeint(odczyt(1) , Odczyt(2)) Tspr = T T = Abs(t) T = T * 10 : T = T / 16 Przecinek = T Mod 10 T = T / 10 1wreset 1wwrite &HCC 1wwrite &H44 Enable Interrupts End Sub nie pokazuję...
cos tkiego udało mi sie stworzyć... tylko jak teraz zrobić przełaczanie by po zmianie stanu portu pierwszy czas pozostał na LCD i zaczeło liczyć drugi czas aż do zmiany stanu portu. Sub Tmr1 Cls Dim Sek As Byte Config Timer1 = Timer , Prescale = 256 Enable Interrupts Enable Timer1 Timer1 = 32000 On Timer1 Czas: Start Timer1 Sek = 0 Locate 1 , 1...
Witam Do 1wreset 'reset 1wwrite &HCC 'jedna kostka więc wykorzystujemy rozkaz SKIP ROM 1wwrite &H44 'dokonaj konwersji Waitms 750 'poczekaj czas konwersji Disable Interrupts 1wreset 'reset 1wwrite &HCC 'rozkaz adresowy SKIP ROM 1wwrite &HBE 'rozkaz funkcyjny - polecenie odczytu Odczyt(1) = 1wread(2) 'odczytaj dwa pierwsze bajty Enable...
Oj Panocku. Disable Interrupts błąd Skąd procek ma wiedzieć czy nastąpiło przerwanie ?
Ok już nie zawiesza, ale jeszcze nie dekoduje komend... Wystarczyło w obsłudze przerwania INT0 dodać [syntax=basic4gl]Enable Interrupts Enable Timer1[/syntax] [syntax=basic4gl]Get_rc5: Disable Int0 Enable Interrupts Enable Timer1 Getrc5(adress , Command) Received = 1 Return[/syntax]
Witam, mam problem ze współdziałaniem PWM i przerwań z transoptorów. Objawy: Bez uruchamiania PWM'a transoptor szczelinowy ładnie liczy obroty silnika (podłączonego np na stałe do osobnego zasilania) . Z PWM'em działa jak wariat. Zlicza chyba też sygnały PWM. Myślałem, że jest to zakłócenie z silników. Ale odłączyłem wogóle silniki i zostawiłem PWM'y...
Dzieki za brak pomocy, przez to musialem sam pokombinowac. A wystarczyło petle główną zrobić pustą i obsługe wyświetlania wrzucic do podprogramu sectic wywoływanego co 1sek. Moze sie komus przyda, pozdro Config Lcd = 16 * 2 'inicjalizacja wyswietlacza Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 ,...
Czesc, Mam problem z wywołaniem przerwania od comparacji timera w ATmedze 168. Przerwanie jest zglaszane gdyz testuje flage w rejestrze TIFR1, jednak pomimo tego nie jest wykonywane. Ustawialem juz chyba wszystkie handlary ale nie ma efektu. Z gory dzieki za pomoc. Ponizej przedstawiam wazniejsze czesci programu. ISR(TIMER1_COMPA_vect) { TRIAK1_ON;...
Nie umiem odczytać temperatur z ds18b20. Rezystor podciągający jest(4.7k), VDD i GND też są podłączone. Linia danych podpięta jest pod pb.7 Aha wyświetliłem sobie też wartości odczytanych bajtów, zarówno 1szy jaki drugi mają wartość 0xFF. podaję kod może koś znajdzie błąd. Dim Cyfra(10) As Byte Cyfra(1) = &B00000101 Cyfra(2)...
Witam Tu jest kawałek kodu do DS 1820. Pomiar temperatury z dokładnością do 0,1°C Sub Read1820 ' wystartuj pomiar 1wwrite &HCC : 1wwrite &H44 Waitms 350 Disable Interrupts 1wreset 1wwrite &HCC 'odczytaj zmierzone dane o temperaturze 1wwrite &HBE T Bd(1) = 1wread(9) 1wreset Enable Interrupts Tmp = Bd(1) And 1 If Tmp = 1 Then...
Moim zdaniem jakoś dziwnie masz te przerwania sterowane. Po co w przerwaniu masz Enable Interrupts - włączasz raz na początku i nie wyłączasz. Disable Int0 w pętli głównej też raczej nie jest dobrym pomysłem. Przed Enable Int0 proponuję dopisać zerowanie flagi przerwania, a na końcu (pętli) idle - dzięki temu po przerwaniu pętla zacznie "iść" od początku.
Witam Forumowiczów, Mam problem z ogarnięciem tematu wywoływania przerwań. Nie jest to problem jak je wywołać ale jak je okiełznać ;-) Wygląda to tak: Jest układ na Mega644PA-AU. Po I2C współpracuje z zegarkiem PCF8583, oprócz tego linia przerwania z PCF podłączona jest do portu D6 procka. Klawiatura zrealizowana jest na przetworniku ADC (port A0) i...
Procek to At89S8252 napisane w Bascomie. Korzystałem z tego . Dim Disp4 As Byte Dim T As Integer Dim T1 As Integer Dim Bd(9) As Byte Dim Tmp1 As Integer Dim Tmp2 As Integer Dim Tmp3 As Integer Declare Sub Showmetemp Declare Sub Read1820 Anoda1 Alias P3.7 Anoda2 Alias P3.5 Anoda3 Alias P3.4 Anoda4 Alias P3.3 '***************************************...
Do Poczatek: Cls 'to w celu poznania zawartosci SPL Lcd Spl Wait 1 Enable Interrupts Enable Int0 Select Case A Case 1 : Gosub Prog1 Case 2 : Gosub Prog2 Case 3 : Gosub Prog3 Case 4 : Gosub Prog4 Case 5 : Gosub Prog5 Case 6 : Gosub Prog6 End Select Loop Przycisk0: Spl = 93 Incr A If A >= 7 Then A = 1 Return Lopatologicznie zrobilem jak wyzej, nawet dziala...
Poniżej mój testowy program w bascomie. Procek m8, wew. zegar 8 mhz. Testowałem na nikon D80 - działa OK. ' PILOT NIKON ML-3 ' ZEGAR 8 MHZ Dim I As Word Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1 Config Portd.5 = Output Reset Portd.5 Compare1a = 100 Enable Interrupts Disable Timer1 Reset Tccr1a.com1a0 '***************************************...
Witam Potrzebuję pomocy w przeportowaniu kodu źródłowego z BASCOM na C (Atmel Studio 6) - mikrokontroler ATMEGA128 Na początek fragment takiego kodu: [syntax=basic4gl] Config Adc = Single , Prescaler = Auto , Reference = Avcc Config Timer0 = Timer , Prescale = 1024 Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Disconnect , Compare B Pwm = Clear Down...
Nie wiem o co pytasz. Chyba wiesz jakich Timerów używasz? :D Jedyne co mi przychodzi na myśl to funkcje które używaja Timerów ale wtedy jest to wyraźnie napisane w Helpie. Na przykład Getrc5() zajmuje Timer0, DCF77 zajmuje Timer1 albo Timer3 i takie tam podobne. Wielu rzeczy po kompilacji możesz się dowiedzieć z pliku raportu (Ctrl + W albo ikonka kalkulatora)....
Witam, mam problem. Próbuję zrobić pętlę, która wykona się 504 razy. Wklepałem taki oto kod: unsigned int i; for(i=0; i<504; i++) [...] i pętla ma tylko 252 iteracje... Wygląda jakby unsigned int był tylko 8bitowy (choć nie wiem, dlaczego 252, a nie 255 w takim przypadku), ale sizeof() twierdzi, że zmienna ma 2 bajty. Robię też odczytywanie pamięci...
Nie ukrywam, że to moje pierwsze zetknięcie z bootloaderem dla AVR (nie stosowałem). Pewien sterownik działa w sieci RS485. Mogę się do niego zalogować, i wydawać polecenia tekstowe. Chciałbym by jednym z nich było "upgrade" po którym nastąpi wywołanie pętli, która skończy się tym, że watchdog zresetuje procesor. Po resecie włączy się bootloader, który...
systick interrupts bluetooth disable system interrupts
programator zmywarki hotpoint ariston zegary renault master drukarki wyrównanie epson
detektor przewodów detektor przewodów
Rozrusznik nie kręci na gorącym silniku benzynowym Zabezpieczenie nad pedałami w Renault Clio 2013