Jeżeli dobrze patrzę w DS, to tryb CTC jest ustawiany bitem WGM02=1 (WGM00=0 i WGM01=0, WGM03=0) w rejestrze TCCR0B a nie WGM01=1 w rejestrze TCCR0A.
deklarujesz skok do przerwania pod jakims tam adresem: .org INT0addr rjmp klawiatura teraz deklarujesz skok do resetu .ORG $000 rjmp reset reset: i dalej jakis kod... tyle ze ten kod zaczyna sie zaraz za rjmp RESET jednoczesnie zamazujac skok do Twojego przerwania INT0. Zakrecone no nie?;]
Widzicie gdzieś problem w kodzie? Zobacz rozwinięcie asseblerowe czy na pewno istnieje obsługa:[syntax=c]ISR(TIMER0_OVF_vect)[/... Kompilator AVT-GCC nie sygnalizuje próby stworzenia obsługi wektora, który nie istnieje a o bład łatwo, bo w nazwach wektorów jest "mały" nieład. Możesz tez sprawdzić debugerem. Jeśli przerwanie nie istnieje nie da...
W trakcie wykonywania tego podprogramu zostało zgłoszone przerwanie zewnętrzne na nóżce int1 atmega328p. Czy atmega328p przerwie wykonywanie podprogramu nóżki int0 Zależy jak zadeklarujesz przerwanie, czy ISR bez atrybutu lub z atrybutem ISR_BLOCK albo jako SIGNAL czy ISR z atrybutem ISR_NOBLOCK lub jako INTERRUPT. Jeśli przerwanie w przerwaniu jest...
Jeśli piszesz w WinAVR i otworzysz plik w asemblerze to zobaczysz, że każde nie używane przerwanie prowadzi do resetu. Nieużywane tzn. nie posiada funkcji obsługi przerwania. Przerwanie takie od np. przepełnienia timera może nastąpić jeśli zostanie odblokowane, ale jak mówisz w tym przypadku to nie to. Możesz po prostu wyłączyć watchdoga i upewnić się...
Rejestr EIFR to rejestr FLAGI przerwania, która jest automatycznie zerowana po zakończeniu przerwania. Badanie jej w przerwaniu musi dac wynik pozytywny. Poza tym masz w tym kodzie błąd: reset eifr.0 if eift.0 = 1 then set led chyba powinno być: if eifr.0 = 1 then set led Napisz jak ustawiasz rejestr EICRA Na końcu przerwania zbadaj If EIMSK.0=1 then...
Przykro mi koledzy, że zamiast świat robić lepszym toczycie jakieś jałowe dyskusje. Napisałbym ten przykład koledze szybciej, ale jestem ostatnio bardzo zajęty. Miałem akurat ten wyświetlacz podpięty do Arduino Uno z Mega328P więc i procek pasował. Używałem go tam do debugowania kodu. Jedynie taktowanie powinieneś w kodzie zmienić pod swoje 8MHz. Każdy...
Bascom nie da sobie z tym rady, C też nie da rady bez wstawki assemblerowej, W wartym 5zl ARM klasy STM32F030F4P6 masz 5 kanałów DMA którymi ogarnąłbyś problem tak po prostu. A z czego Ty chcesz te DMA wyzwalać? W przerwaniu bez wstawki assemblerowej też sobie z tym nie poradzi. Coś nie chce mi działać, wgrałem z kompilowany hex do procka i restartuje...
Proszę nie odsyłajcie mnie do wujka google bądź noty katalogowej A jednak odeślę cię: http://www.atmel.com/Images/doc8161.pdf Strona 9, oraz strona 57 (tablica). The interrupts have priority in accordance with their Interrupt Vector position. The lower the Interrupt Vector address, the higher the priority. Myślę, że to rozwieje twoje pytania :) A Wujek...
Watchdog nie jest programowy tylko sprzętowy Możesz mi powiedzieć co tu miałeś na myśli? Watchdog nie jest programowy? pierwsze słyszę. programowo: 1. ustawiam watchdoga na jak najkrótszy czas 2. wyłączam przerwania (na wszelki wypadek) 3. pętla nieskończona. i masz programowy PEŁNY reset i skok do adresu ustawionego za pomocą fusebitów. (to jest najpełniejszy...
To przy budzeniu przerwaniem przy pierwszym sygnale przerwaniu wykona się przerwanie i w nim kod? Tak. Warto zapoznać się z: https://www.nongnu.org/avr-libc/user-man... znacie jakieś sposoby na resetowanie mikrokontrolera oprócz wykorzystania sprzętowego. Skok pod adres 0 nie resetuje rejestrów procesora (np. DDRx) i trzeba to...
Bardzo dobrze, uznałeś że wait zupełnie się nie nadaje... Ja bym zrobił to tak: Timer generuje przerwanie co ok. 1s w przerwaniu zwiększam jakąś zmienną o 1... Z resztą poniższy przykład chyba najlepiej Ci wytłumaczy moją idę: do if wejscie_1 = 1 then licznik_1 = 0 flaga_wejscie_1 = 1 end if if flaga_wejscie_1 = 1 then ' to mozna umiescic w przerwaniu,...
Dobra, przyznaję się do błędu. Przeoczyłem tę oczywistość. Jakim cudem ten program wchodzi w pętlę konfiguracja, jeżeli to co pokazujesz zaczyna się od adresu 0x26 (przerwanie od UART1/RX)? Nie ma wektora startu z resetu. Sprawa drugorzędna: dlaczego spod adresu 0x40 skaczesz do 0x500, kiedy od 0x40 jest właśnie obszar aplikacji? Reszta programu widzę,...
To co zrobiłeś do niczego się nie nadaje. Ciągle masz problemy, o których jużpisaliśmy - brak sprawdzania flag interfejsu TWI, brak reakcji na przerwanie. Ze względu na czas realizacji poleceń I2C nie ma sensu umieszczać ich w ISR. Jeśli już to można wykorzystać ISR od TWI i tam to zaimplementować. TWI oparte jest o maszynę stanu, implementacja też...
Generalnie uC powinien być odcinany od napięcia zasilania możliwie jak najszybciej, ale może uda się nad tym zapanować tak: Napięcie zanika: 1. uC dostaje przerwanie zboczem narastającym i: 1.1 zapisuje dane 1.2 wchodzi w tryb Power Down 1.3 śpi aż do zaniku zasilania Niespodzianka (!) zasilanie wróciło zanim zanikło całkowicie, a uC śpi w Power Down:...
witam. od kilku dni probuje rozwiazac pewien problem. mianowicie ucze sie programowac avr'y i postanowilem zrobic budzik. jednak problem zaczal sie gdy zaczalem dzialac na przerwaniach. na wejscie int2 podany mam sygnal o czestotliwosci 1Hz. ma on co sekunde powodowac przerwanie w ktorym jest odczyt zegara oraz wyswietlenie go na wyswietlaczu 2x20 znakow....
wlasnie o pujscie w maliny mi chodzi - inny program po jakims czasie dziwnie mi sie wiesz - czas jest uaktualniany a temperatura nie. chce wylapac moment ze temperatura stoi - czujnik nie reaguje i wowczas wykonac reset procka. Mozesz krotki przyklad na obsluge dac? Cos prostego byle zawieralo kompletna obsluge watchdoga - uaktywnienie, reset itd. Pozniej...
Zadziałać zadziała. Ja bym nawet powiedział że większego wpływu na zakłócenia to nie będzie miało (większym zakłóceniem by było nagłe przerwanie prądu w długim przewodzie, natomiast przy diodzie przy tranzystorze prąd nadal będzie kontynuował przepływ przez przewód).
Odbiór znaków rób w przerwaniu i zapisuj je kolejno do bufora. W przerwaniu tym włączaj lub resetuj przerwanie timera tak, aby przerwanie timera było wyzwolone dokładnie 3,5 znaku później. Jeśli w tym czasie przyjdzie jakiś znak resetuj timer i cykl będzie mógł powtórzyć się, jesli jednak znak nie zostanie odebrany w tym czasie przerwanie timera wyzwoli...
Nie podałeś schematu, więc spytam. Czy kondensatory filtrujące są? Jak zasilana jest ATmega? czy źródło zasilania ma odpowiednia wydajność prądową?
Problem rozwiązany: W urządzeniu używam INT0. INT1 i INT2. Sygnałem podłączonym do przerwań jest detekcja zera sieci (z 3 faz). Detektor generuje krótki ujemny impuls w momencie przekroczenia napięcia przez zero. INTy były ustawione na stan niski (a nie na zbocze). Gdy 3 detektory działały poprawnie (dawały ujemne szpilki w zerze) procesor widział je...
Rezystora nie ma na schemacie ale fizycznie go wlutowalem i dalej nic. Najczesciej wyzwalaja sie przyciski klawiatury lub zewnetrzne przerwanie. W programie wlaczone pull-up.
Działa. Pewnie o czymś zapomniałeś na wstępie. Mój działający kod: .include "m128def.inc" .cseg .org0x0000 rjmpreset ;skok po resecie systemu .org0x0018 rjmpdata ;skok po wykryciu zgodności reset: ldi r16, high(RAMEND) out SPH, r16 ldi r16, low(RAMEND) out SPL, r16 rcallKONFIGURACJA_TIMER1 sei loop: nop rjmploop ;......
tak też napisałem że nie sądzę żeby to miało tutaj wpływ, ale każde urządzenie powinno mieć go włączonego. Jak włączasz zasilacz do sieci myślisz że od razu on osiąga napięcie 5V? Jak tak to jesteś w błędzie. Wyobraź sobie że procesor zacznie pracować już przy 2,5V, ale może zrobić coś "dziwnego". Dlatego BOD powinien być włączony wszędzie tam, gdzie...
Kolega Mad Jaro mierzy czas pomiedzy INT-em i przelicza na obroty. zablokowanie INT spowoduje pływanie obrotów( INT nie liczy impulsow). Kolega xury ma rację odnośnie jednokrotnego użycia szukania czujników. A poza tym zsynchronizuj odczyt 1wire z przerwaniem INT tzn. komunikację z 1wire podziel na max -5 bajtowe odcinki i wykonuj je po przerwaniu INT....
Kurdę no przerwanie jest wywoływane co 310us a to jest bardzoooo wiele cykli zegara na to by mogła się wykonać cała pętla while, cały czas nie rozumiem czemu na atmega 16 działa a na atmega128 nie chce działać :/ sprawdzałem bity ustawiające timer i przerwanie, są one takie same dla mega 16 i 128 więc nie wiem w czym jest problem :( Ten program działa...
Dzień dobry, witam wszystkich. Mam problem z wstawką asemblerową do języka C. Programuję procesor atmega2560. Nie rozumiem dlaczego nie działa funkcja "asm volatile ("mov r21,MCUSR");". Chcę dzięki niej przenieść wartość rejestru mcusr do rejestru r21. Lista błędów w załączniku. Wiem, że one wprost mogą nie wskazywać na to, że ich źródłem jest ta linijka...
Dokladnie, musisz ustawic stos. U mnie struktura wygladala tak .include "m8def.inc" .org 0x00 rjmp reset RESET: ldi R16,low(RAMEND) out SPL,R16 ldi R16,high(RAMEND) out SPH, R16 main: rjmp main
Zmień doświadczalnie wartość wpisywaną do timera. Zobacz czy poprawnie wyświetla ci to co chcesz. Ważne jest także żeby przerwanie nie było za długie bo wtedy może grozić to resetem uc.
Cały problem jest w tym żeby te dwie ATmegi się zsynchronizowały. Przerwanie od SPI występuje po zakończenia transmisji pierwszego bajtu. Zanim nastąpi obsługa przerwania to pierwszy bajt zostanie utracony. Nie mamy też gwarancji że dwie Atmegi "wystrzeliły" :) równocześnie i Slave nie czyta np. 4 bajtu nadanego przez Mastera. Jeżeli to by była np....
Dzięki za odpowiedzi. Schemat zasilania wygląda tak. Zawiesza się procesor u1, który znajduje się na drugiej płycie podłączonej do zasilacza 30cm szarej taśmy. https://obrazki.elektroda.pl/9335085400_... Na tę chwilę nie potrafię określić czy procesor zawiesza się na skutek włączenia czy wyłączenia, cewki stycznika czy styków (obciążenia)...
Konwerter napięć? Mam zasilanie z dwóch baterii- paluszków (Atmega 8L) lub zasilacza bezpośrednio do pinu zasilania. Pin reset dołączony do zasilania.
Potrzebny mi timer z wyzwalaczem i przerwaniem na ATmega. Takie rzeczy robi sie programowo, albo programowo wydłużając czas zliczania timera sprzętowego w mikrokontrolerze, można też z uzyciem przerwań. Dlaczego chesz to zrobić całkowicie sprzętowo, obawiasz się o to że program przestanie poprawnie pracować? czy nie wiesz jak to zrealizować w programie?...
Ostatecznie wysyłam na Domoticz tak: Domoticz_en , tylko w pierwszym Case podprogramu Domoticz_send to parsować ?
Kod na wyświetlacz dałem tylko poglądowo aby mieć możliwość podglądu działania programu w czasie testów. W takim razie bez wyświetlacza i z cofaniem sie bramy przy wykryciu przeszkody. Testuje przyciski , styczniki i pobór prądu cały czas około 100 razy /sek. w zależności od częstotliwości procka , i reaguje natychmiast . Przeszkody wykrywa przy zamykaniu...
W kodzie stoi jak byk .... ISR(TIMER1_COMPB_vect) ani widu, ani słychu :-P Dokładnie, a ja już w innym podobnym twoim temacie podpowiadałem ci , że robisz niestety kardynalne błędy podczas konfiguracji Timer1. Bo w książce miałeś timer0 i było tak: [syntax=c]TIMSK |= (1<<OCIE0);[/syntax] Więc gdybyś przeniósł to na Timer2 - to byłoby mniej boleśnie...
mam maly problem.. zdarza sie ze moj układ oparty na ATmega 32 jakby sie zawieszał... wykorzystuje przerwanie zewnetrzne... // External Interrupt(s) initialization // INT0: On // INT0 Mode: Rising Edge // INT1: Off // INT2: Off GICR|=0x40; MCUCR=0x03; MCUCSR=0x00; GIFR=0x40; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; a w programie...
Witam, Piszę tutaj gdyż jesteście moją ostatnią deską ratunku. Mam problem z układem NRF24L01. Transmisja pomiędzy dwoma takimi układami przebiega bezproblemowo, jednak dodatkowo chciałbym skorzystać z opcji pakietów potwierdzających, czyli PAYLOAD_ACK. Po otrzymaniu zwykłego pakietu na urządzeniu slave (odbierającym), odsyłam z powrotem jakiś pakiet...
Gdzies juz chyba widziałem, jak napisałeś coś w stylu, że "ogólnie wiadomym jest, że bascomowe SPISLAVE nie konfiguruje tak jak potrzeba" . Ja o tym czytałem pierwszy raz... Mogę wiedzieć której wersji Bascom używasz jeśli nie najnowszej 2085? W SPI najważniejsze jest to, że to master taktuje slave`a. Dlatego nie bez powodu w komendzie konfiguracyjnej...
Tak, jeśli używasz przerwania to nie potrzebujesz tej funkcji. Procesor wcale nie musi się resetować, może wpadać w nieokreśloną martwą pętlę po skoczeniu do przerwania od RX (które jest nieokreślone). Program działa więc tak: wykonuje wszystko aż do napotkania funkcji USART_ReceiveByte, wchodzi do niej i oczekuje na zakończenie odbioru bajtu przez...
Przepraszam że nie odpisuje ale mam sporo pracy. Przyjrzałem się programowi widzę że za dużo rzeczy robisz w przerwaniu od INT2. Procedurę "Oblicz" przerzuć do pętli głównej, uwarunkuj wejście do niej tym że nastąpiło przerwanie od INT2. Na koniec procedury "Oblicz" skasuj flagę od wejścia w przerwanie od INT2 i trzeba przeniesc tam zerowanie flagi...
Pomysł z tym programikiem jest dobry ale lepiej zrobić tak aby wykorzystać przerwanie od uart'u od danych przychodzacych. W obsłudze tego przerwania robimy taki myk że gdy przyjdzie znak "$" to niech sie zeruje licznik (wskaźnik pozycji) i każda nastepna dana z portu niech będzie zapisywana do nastepnej zmiennej. Potem można z tych zmiennych wyciągnąć...
Osobiście wyznaję zasadę, im trudniej, tym ciekawiej i można się więcej nauczyć... Jeśli chodzi o zasilanie awaryjne to ATmega wcale dużo pradu nie pobiera w odpowiednim trybie uśpienia. Można ją wybudzać przerwaniem z licznika, może to byc reset z watchdoga (Źródło resetu jest rozpoznawalne w MCUCSR), obsłużyć co trzeba i znowu uśpić - przeliczanie...
https://obrazki.elektroda.pl/9342271000_... Dzień dobry, Urządzenie powstało w celu monitorowania poziomu wilgotności w pewnej zamkniętej przestrzeni. Przekroczenie zadanego poziomu jest sygnalizowane sygnałem dźwiękowym (buzzer) i świetlnym (LED). Wartości z ostatniego pomiaru można w każdej chwili odczytać, po naciśnięciu przycisku,...
Nie mylisz się a dokładnie powinno tak to przebiegać 1wreset 1wwrite &HCC 'reset magistrali 1wwrite &H4E 'zapis do scratchpad 'zapisuje trzy bajty do scratchpad zawsze obowiązkowo i nie można zapisu przerwać resetem 1wwrite &H00 '1bajt 1wwrite &H00 '2bajt 1wwrite &H7F '3 bajt Wait 1 1wreset ' reset 1wwrite &HCC 'skip ROM 1wwrite &H48 ' zapis do EEPROM...
Tylko tak dla ścisłości... Wektory przerwań używają rozkazu jmp (nigdy rjmp)... The most typical and general program setup for the Reset and Interrupt Vector Addresses in ATtiny2313 is: ..... 0x0000 rjmp RESET ; Reset Handler 0x0001 rjmp INT0 ; External Interrupt0 Handler 0x0002 rjmp INT1 ; External Interrupt1 Handler ..... Tak więc RJMP czy JMP zależy...
.... Chce zrobic obsluge przyciskow zewnetrznych na przerwaniach a wlasciwie przerwaniu bo moj biedny uC posiada tylko jeden pin na zewnetrzne przerwanie co nie jest raczej problemem bo kazdy guzik moze wywolywac to samo przerwanie a dodatkowo podlaczyc je z osobna do roznych wolnych portow Czyzbys w ostanich minutach zmienil pocessor? O ile pamietam...
Robi się to prosto na wejściu ICP Atmegi, mierzysz czas pomiędzy kolejnymi zboczami, raz jest opadające, raz narastające itd.. potem to tylko interpretacja wyników, liczenie bitów i po odliczeniu 64 bitów z transmitowanych 66, bo dwa ostatnie dla uproszczenia procedury pomijasz. wyświetlasz na LCD lub wysyłasz po RS232 do komputera, a tam wyświetlasz...
napisałem program zmieniłem taktowanie uc na 8MHz wgrałem program jedyne, co działa to obsługa przycisków Dodano po 24 Problem najpewniej występuje w tej części programu: Dodano po 3 66 osoby widziały ten post, ale tylko jedna odpowiedziała. Wiesz dlaczego? Ponieważ Twój kod i schemat są nieczytelne. Nadal to jest problem? Jakie mosfety włączają zasilanie?...
No to zaczynamy po raz kolejny. Coś takiego jak stworzyłeś to niestety za szybko nie będzie działać. Mega z kwarcem rs 14 z groszami działa naprawdę szybko i można zrobić bardzo dużo w jedna sekundę. Do odbierania i wysyłania danych można sobie napisać własną procedurę - nawet w bascomie i jest ona sporo szybsza i działa rewelacyjnie. Deklarujemy przerwania...
Witam !! Napisałem program na sterowanie pilotem. Nie działa mi set Led_2. Przycisk 2 z pilota wykonuje warunek ale nie setuje portb.2 ? Co jest [syntax=c] $regfile = "m8def.dat" 'rejestry mikrokontrolera atmega8 $crystal = 8000000 'częstotliwość taktowania mikrokontrolera $baud = 9600 Config Portb = &B11111111 : Portb = &B00000000 'cały portB jako...
Są rzeczywiście sytuacje, gdzie hardware'owe i2c/twi potrafi się zawiesić. Nie jestem specem od AVR niemniej kiedyś bawiłem się w atmega interfejsem TWI. Wykonywałem losowe zwarcia linii SDA zarówno w trakcie transmisji jak i gdy linia jest wolna. Czasem gdy rozwierałem linię SDA ona zamiast podciągnąć się do 5V pozostawała na 0V a w rejestrze statusowym...
Jeśli chodzi o makra, no cóż... Nikt nigdy się nie pokusił, żeby o tym wspomnieć na studiach, a samemu jeszcze do tego nie doszedłem, stąd te błędy. Co do priorytetów to się nie zgodzę, bo przecież ważniejsze jest przerwanie o niższym adresie (najpierw RESET, potem INT0, INT1 itd. ) No chyba, że to co jest w książkach jest błędem. Jeśli chodzi o prąd...
Ogólnie widziałem że używasz real-time do domierzania opźnień. nie, do opóźnień jest przerwanie timera 1 co 50ms. KEYBOARD_KEY_TIMEOV z przerwania obsługi klawiatury, jak po 15 sekundach nic nie naciśnięto, wystawiany jest kod klawisza : KEYBOARD_KEY_TIMEOV. natomiast propozycja milis() niestety nie przyniesie oczekiwanego rezultatu. najlepiej jest...
Jak bym chciał żeby mi ktoś pomógł to włożyłbym minimum wysiłku by przygotować kod na który można spojrzeć bądź skompilować. Nie musi być cały, ale taki który daje możliwość powtórzenia występującego problemu. Chcesz odbierać dane z UART a masz w pętli Waitms. Myślisz że te dane na Ciebie poczekają? Przy tak znikomej ilości informacji jakie zapodałeś...
(at)ElektrodaBot Taką składnie zastosowałem: [syntax=vbnet] Timer_isr: Incr Case_mcp 'co przerwanie nastepny krok Select Case Case_mcp Case 1 : Reset Mcp_clk Set Mcp_dout 'start konwersji Case 2: Reset Mcp_cs Case 3: Set Mcp_clk '17 Case 4 : Reset Mcp_clk Mcp_dout = Mcp_mode_single 'ustawienie wejsc w trybie single Case 5 : Set Mcp_clk '16 Case 6: Reset...
Ja mam notę PDF do tego procka z 2004 roku i jest w niej wszystko OK Najchętniej otukł bym komuś głowę, z tego Atmela. :P Zwykle najnowsza wersja czegoś, nie psuje tego, co już było poprawne w wersji poprzedniej. ....grrrr.... oczywiście rozumiem, że te dwie linie nie były zakomentowane i to tylko omyłkowo wkleiłeś taki kod - bo wtedy na prawdę by...
W kodzie, który pokazałeś, przerwanie timera jest w zasadzie niepotrzebne (bo nic istotnego nie robi), a przerwanie INT0 jest źle napisane (nie wolno w przerwaniu czekać, a Ty wysyłasz w nim długie łańcuchy, więc procedura wykonuje się bardzo długo, a w tym czasie inne przerwania wiszą, kod poza przerwaniami też). Ponadto wołasz sendstr zarówno z pętli...
Na początek użyj znaczników syntax i pozmieniaj magiczne numerki na nazwy bitów. Np.: avr/wdt.h
Ten sam kod, który zaprezentowałem w pierwszym poście , natomiast przerwanie wywołane już na nodze portb.0 i działa zmienna nie jest nadpisywana. Cała reszta kodu bez zmian poza zmianą przerwania. Przerwania skonfigurowane prawidłowo. Moze przerwania masz skonfigurowane prawidlowo... ale..... Czy mozesz wyjasnic w jakim celu, w obsludze przerwania...
Chłopaki dajcie na luz. Odbiegamy od tematu. Właśnie wyszła nowa wersja Bascoma 2.0.2 w której dodano : mcs bootloader new reset option. you can send a string for reset. To send special ascii use {}. {027} will send ascii 27. To send { you have to use the ascii value as well since { is used to send special characters. - mcs bootloader can use DTR or...
1. Przy jakim napięciu na ADC następuje wyzwolenie (jeśli miałbym włączone przerwania od ADC i napisaną funkcje)? Wszystko wyjaśnia nota katalogowa. Przerwanie nie jest wyzwalane żadnym poziomem napiecia, tylko zakończeniem pomiaru (nie trzeba wtedy badać bitu ADSC w ADCSRA). Pomiar należy wystartować niezależnie, lub można w tym samym przerwaniu po...
Witam wszystkich, proszę o pomoc w rozwiązaniu problemu w kodzie w języku C ale ze wstawką asemblerową. Poniżej zamieszczam kod. [syntax=c]/* * main.c * * Created: 2/14/2022 1:11:10 PM * Author: Maciej */ #include <xc.h> #include <avr/wdt.h> #include <avr/interrupt.h> #include <util/delay.h> #define WDT_ENABLE ISR(WDT_vect)//przerwanie...
.org 0x0000 rjmp reset ;skok do początku programu .org 0x0005 rjmp led_off ;wyskok z wektora 5 do procedury obsługi reset: ldi r16, low(RAMEND) out SPL, r16 ;ustawienie wskaźnika stosu ldi r16, high(0xF0BE) out TCNT1H, r16 ;ustawienie wartosci H timera T1 ldi r16, low(0xF0BE) out TCNT1L, r16 ;ustawienie wartosci L timera...
Możliwe sugerowałem się tym, że niezależnie czy po wpisaniu Reset Pinb.1 lub Reset Portb.1 i wrzucenia do uC działanie było takie same. Nawiązując do mojego problemu, próbowałem zmieniać w poprzednich kodach port na pin tak jak radził "piotrva" jednak nie przynosi to efektu. Nadal mam problem z uruchomieniem tego obrotomierza. EDIT: Jest jakaś poprawa,...
Witam Mam kilka pytań do starszych kolegów. Nie wiem jak ''ugryźć'' tego pwm-a żeby diody rozjaśniały mi się wszystkie od razu [syntax=bash] ...... Dim led(3) As Byte ........ Przerwanie: Incr Licznik If Licznik = 100 Then Licznik = 0 If Licznik < led(1) Then Set D1 Else Reset D1 If Licznik < led(2) Then Set D2 Else Reset D2 If Licznik < led(3)...
Witam poniżej przedstawiam kod programu za srednikami jest poustawiany timer 16 bit który steruje serwomechanizmem z modeli RC i działa wszystko poprawnie (wyjscie OC1A do serwa) natomiast ja chcialbym to serwo wysterować 8 bitowym wyjscie (OC0/t0 pin1 do serwa) I niby wszytsko dobrze posutawialem ale serwo ani drgnie dlaczego? #include "avr.inc"...
Witajcie Mam problem. Zrobiłem układ który wysyła do wyświetlacza TFT dane za pomocą funkcji opisanej w datascheet Atmegi16. Działa super: void USART_Transmit( unsigned int data ) { while ( !( UCSRA & (1<<UDRE))); UCSRB &= ~(1<<TXB8); if ( data & 0x0100 ) UCSRB |= (1<<TXB8); UDR = data; } zrobiłem też odbiór i tu się zaczynają...
Ogólnie mam blue booka wiec mam nadzieję, że dużo mi powie. W BB nie ma obsługi przez uart. Zwykłe delay tyle że zawieszane są przerwania na czas transmisji bitu a nie jak gdzie indziej bajtu czy nawet całej transmisji łącznie z reset. Jeśli zawieszanie przerwań na kilkadziesiąt us nie jest problemem użyj płatnych, niedoskonałych jak napisał (at)kamyczek...
Witam Mam problem z transmisją I2C po wybudzeniu uC. Jeśli uśpienie nie było zbyt głębokie (tryb IDLE) transmisja I2C działa bez problemów. Jeśli uśpienie było głębsze (np. POWER DOWN) po wybudzeniu nie działa magistrala I2C. Aby ponownie zaczęła działać konieczny jest RESET uC. Napisałem krótki program ułatwiający analizę problemu. plik main.c: [syntax=c]#include...
Właśnie... Jest jeszcze motyw taki, że PIN, którym podłączam się do 1Wire to INT0, przerwania na oba zbocza. Zbocze opadające zeruje timerek a zbocze narastające sprawdza ile upłynęło czasu (ile trwał impuls). Jeśli czas trwania impulsu oznacza RESET PULSE od mastera, zaczyna się cała obsługa w moim SLAVE. W nocie katalogowej jest napisane, że jeśli...
A sprawdzałeś czy w rzeczywistosci działa? Mi jak tylko wybiorę tryb ze sterowaniem automatycznym to odrazu tracę kontrolę nad pinem. Dokumentacja twierdzi że wewnętrzne sterowanie jest typu set/reset a u mnie nie da się zmieniać stanu portu - nawet jak zatrzymuje tajmer to i tak nie działa. Poradziłem sobie z tym wykorzystujac przerwanie od porównania....
Widzę że kolega wyznaje zasadę, nie ważne do czego, ważne żeby się przyczepić. Proponuję w takim razie krótką, zabawę symulatorem. W każdym razie, nie wiem do końca jakie było przesłanie autorów, jeśli bit I w SREG, będzie ustawiony, to fakt tak czy inaczej flaga INTF zostanie skasowana, przez wywołanie przerwania bądź pseudo "reset" procesora. Z tą...
Ustawiłem bit WDIE oraz WDP1 i WDP2 ( ustawiają sekundę jak było napisane w nocie katalogowej), lecz jak śledzę to debuggerem to widzę że system dalej się resetuje. Dziwna sprawa dioda świeci się (około 1 sekunda) i gaśnie (na około 1 sekundę), chociaż nie ma delyów ani operacji xor. Wydaje mi się że ten program powinien zapalić diodę po upływie 1 sekundy...
Witam. Mam podłączony moduł BlueTooth HC-05 do ATmega328, używam go do programowania oraz do standardowej komunikacji. Programowanie jest możliwe dzięki wyprowadzeniu STATE w HC-05. Pin ten skonfigurowałem tak, aby podczas normalnej pracy był na nim stan HIGH (3.3V bo taka jest logika HC-05) a podczas połączenia np z telefonem, stan zmienił się na LOW....
Witam, walczę z tym cały dzień i nie potrafię zrozumieć dlaczego program nie działa. Próbuje poprostu "uruchomić" przerwanie podczas przepełnienia timera0. Jak widać niżej jest bardzo prosty kod który powinien zapalać i gasić diodę. Preskaler ustawiony na 1024, ustawiona odpowiednia flaga w rejestrze TIMSK ...i nei działa. Jeśli w pętli while wrzuce...
A wyłączanie nośnej. Jak ma tylko nie wychodzić na zewnątrz to trzeba wpisać: reset Tccr.0 com00 Wtedy PortB.3 jest normalnym wyjściem. A jak trzeba zatrzymać licznik: reset Tccr0.cs00 Wtedy nośnej nie ma ale wyjście PortB.3 jest dalej zajęte. Ja zresetujemy oba bity to Timer nie chodzi i wyjście jest dostępne.
No to faktycznie specyficzny. Wykonuje sie raz i reset ?? Bo wlasnie to zrobi jesli nie wroci z przerwania. Jak napisalem wyzej jezeli 2 cykle Ci psuja projekt to tylko zmiana na szybszy procek pomoze, ewentualnie podkrecenie tego co masz ale wtedy nikt Ci nie da gwarancji poprawnego dzialania. Pozdro Dexter
Witam. Opisze krótko : [syntax=c]char napis1[5] ={'N','a','p','i','s'};[/syntax] Wysłana poprzez UART jest poprawna. natomiast deklaracja jako : [syntax=c]char napis2[] ="Napis";[/syntax] powoduje wysłanie na UART samych 0xFF. Kod się kompiluje, UART dziala porpawnie, Procesor ATmega 2560. Kompilowałem pod AVRStudio 7, AVR Studio 6.2 i AVR Studio 4.19,...
Witam . Napisałem ( prawie) sobie na ww procesor program w asm i bascomie który ma robić za zamek otwierany kartą . W bascomie wszystko działa w 100 % według założenia jednak w asm mam taki problem że układ sam zmienia swoje taktowanie (ponad 2x) przez co wszystkie funkcje czasowe nie pracują jak powinny . Nie było by w tym nic niezwykłego ( ustawiony...
Wkleje plik includowany z obsługa LCD, który stosuje oraz czesc programu głownego: LCS.asm: ;=======================================... ; Obsluga LCD zgodnego z HD44780 dla 8-bitowej szyny danych v1.0 ; Nie obsluguje BUSY flag ani odczytu adresu z LCD ;!!! Znak lub komenda do wyslania do LCD przekazywane sa przez...
Witam!!! Ale nie wiesz sie cały program tylko RC5, zrobiłem to bez przerwania i działa bez zarzutu, moj progam wyglada tak kod: $regfile = "m162def.dat" 'informuje kompilator o pliku 'dyrektyw mikrokontrolera $crystal = 8000000 Config Lcd = 20 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs...
Witam, Chciałem zrobić opóźnienia w programie dla Atmega8. Wykorzystałem przerwania, ale przy symulacji programu w AVR Studio okazuje się że program po około 260 mikro sekundach resetuje się(wraca do funkcji main() ). Nie jet to spowodowane raczej watchdogiem bo jest on wyłączony. Czy ktoś potrafi mi powiedzieć dlaczego tak się dzieje? Aha, oczywiście...
OK, dzięki za podpowiedź. Przetestuję na dniach i dam znać. Sławek Dodano po 6 Witam ponownie, oto wyniki testu: 1. przesunięcie danych w EEPROM o 1 lub 2 bajty dalej i wskazanie rejestrem EEAR = 0; po zapisie lub po odczycie całego bloku danych nic nie zmieniło ale ... 2. sprawdzając co siedzi w EEPROM okazuje się, że praktycznie dane są, nie doszukiwałem...
Witam. Borykam się z problemem przerwania INT1 w procesorze Atmega88p. Otóż przerwanie raz działa poprawnie , wykrywa odpowiednie zbocze , a innym razem załącza się praktycznie losowo . Napisałem specjalnie prosty programik aby zobrazować problem . Program jest pisany w bascomie jednak ze sporą ilością wstawek z assemblera . (Na czystym bascomie zachowuje...
sterujesz pinem PD2 ustawiłeś jako wejście (chociaż to akurat możnaby pominąć bo po resecie i tak wszystkie piny są wejściami).... za to z PC0 zjadłeś ustawienie kierunku. Druga i niestety MASAKRA jaką robisz to _delay_ms() w przerwaniu. Wiem, że zaraz napiszesz, że tu może tylko do testów - no ale nawet do testów nie używa się funkcji opóźniających...
Analizator dawal wyniki niejednoznaczne (tzn losowe fazy transmisji w trakcie zwiechy). Poradziałem sobie przez reset interfejsu i dotaktowanie razem po stronie mastera. Nie wiem dlaczego samo dotaktowanie, lub samo zresetowanie mastera nie dawało wyjścia i dlaczego master (i2c doskladnie bo master zyje) sie zawiesza. Dziwiaczny objaw - jeszcze z taką...
niech kolega właczy sobie symulator i w pracy krokowej od razu zobaczysz w którym miejscu programu program się resetuje, przerwanie zasymulujesz przez ustawienie z ręki odpowiedniej flagi.
A może przyczyną jest nie wyzerowany licznik preskalera (strona 75): Bit 0 PSR10: Prescaler Reset Timer/Counter1 and Timer/Counter0 When this bit is written to one, the Timer/Counter1 and Timer/Counter0 prescaler will be reset. The bit will be cleared by hardware after the operation is performed. Writing a zero to this bit will have no effect. Note...
I tu dochodzimy do sedna sprawy. Jezeli zrobimy odczyt/zapis jednego bitu w przerwaniu to samo wejscie do przerwania blokuje automatycznie wszystkie przerwania. Samo przerwanie trwa ok. 20uS (nie pamietam) a katalogow bit DS trwa 120uS i tutaj mamy zysk czasowy zajetosci procesora nie mówiac juz o sygnale reset który jak ktos napisal trwa 2x480us o...
Przez buforowanie transmisji... Po odebraniu pierwszego znaku odpalasz timer i zaczynasz ładować kolejne znaki do tablicy... Przy każdym następnym znaku resetujesz timer... Jak string się kończy timer się przepełnia i generuje przerwanie...
Szczerze i bez bicia przyznaję, że w Atmegach ISP i SPI ZAWSZE ALE TO ZAWSZE MI SIĘ MYLI. Stąd każdorazowo sięgam po odpowiednią lekturę musząc stworzyć np nowy przewód. Lepiej przeczytać i zrobić dobrze niż zbabolić :) Reset bierze udział w programowaniu, podczas programowania układ musi być "zresetowany" i po to jest ten reset dla programatora. Dokładnie....
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...
Witam :) Zaczynam przygodę z AVR i ostatnio napotkałem następujący problem. Mam taki oto fragment programu na ATmegę128, potrzebuję obsłużyć przerwanie. Problemem jest to, że po uruchomieniu programu i wywołaniu przerwania po jego wykonaniu program nie wraca do "Main", a zaczyna od linii "jmp Reset" jednocześnie przestawiając licznik cykli o ponad 65k...
Roznica pomiedzy skokiem pod adres $0000 a reset przez watchdoga jest i to spora. Watchdog sprzetowo linie RESET na jakis czas aktywuje. Wtedy wewnetrznie wszystkie rejestry opisane w dokumentacji przyjmuja swoj stan poczatkowy. Przy skoku pod adres $0000 ciagle dzialaja przerwania, sa poustawiane rozne rejestry wczesniej zainicjalizowane wiec moga...
A co na to symulacja programu? Taki program wgraj: .nolist .include "m32def.inc" .list ; ## START ########################################... .cseg ;=======================================... ;= WEKTORY PRZERWAŃ = ;=======================================... .org 0x0000 rjmp reset_vector ; po...
Witam, mam problem z obsługą przerwania INT6 w Atmedze128. Układ działa prawidłowo, ale w przypadku gdy dostaje impuls z RTC PCF8583 na przerwanie INT6 to resetuje się. Tu jest kod obsługi tego przerwania: [syntax=c] /* * USTAWIENIA */ #define RTC_INT 6 #define RTC_INT_PORT PORTE #define RTC_INT_DDR DDRE #define RTC_INT_PIN PINE #define INT_RTC INT6_vect...
Witam, zmagam się z tym problemem już dobrze ponad tydzień, miałem nadzieję, że uda mi się samemu go rozwiązać, jednak nie obejdzie się bez pomocy bardziej doświadczonych w temacie :wink: Otóż problem jest jak w temacie, dosyć rozbudowany wsad (ponad 96% pamięci) działa poprawnie, nie zauważyłem żadnych anomalii, błędów logicznych czy obliczeniowych....
Witam. Po napisaniu poniższego kodu wyskakuje komunikat Reset nieznany Dalsza część kodu bez zmian. Eliminacja drgań przycisków jest przez opóźnienie: 60ms. Program mi się resetuje nadal nie znam przyczyny. Może wystąpić reset od przepełnienia stosu? ISR_OUTTP_COMP2_DISABLED //BLOKUJE PRZERWANIA OD CTC [syntax=c] int main (void) { WDT_OFF(); ADCinit();...
Witam, Jestem początkującym w temacie, napisałem sobie sterowanie 8 serwami, ale chciałbym to robić bardziej dokładnie przy użyciu trybu CTC timera1 i sprzętowego rejestru przesuwającego. W następujący sposób go inicjalizuje // na początek włączamy tryb czasomierza i ustawiamy wyjscie na 0 w trybie normalnym TCCR1A = 0x00; // tryb czasomierza TIFR &=...
reset przerwanie timer atmega przerwanie przerwanie timer atmega
chłodziarka zamarza amazon assistant zjawisko naskórkowości
philips senseo sterownik ładowarki akumulatora
Opel Omega B 2.5 V6 - Automatyczne ssanie i diagnostyka Schemat podłączenia przewodów mikrofonu Yosan CB100