Aj, aj, źle sformułowałem temat - już poprawilem ;) Częstość przerwań nie ma tu znaczenia dla mnie, jeśli trzeba pomiar może być robiony co sekundę, chodzi o to, aby inkrementacja zmiennej w przerwaniu była wykonywana co 1uS. Co do 'Input Capture' to zajmę się tym jutro.
Witam prosze mi powiedziec co źle robie... bo albo trace wiare w cokolwiek... napisalem program, zegarka, nieskonczony, tak czy inaczej w chwili obecnej odmierza i pokazuje czas, na timerze 0 multipleksowanie, na timerze 2 w trybie asynchronicznym odmierzana jest jedna sekunda, kwarc zewnetrzny zegarkowy, schody zaczynaja sie gdy w petli głównej, patrz...
To był głupi pomysł ,ustawiłem sobie co 15 min i wyświetlił się komunikat er=21 reset i nic nie mogłem już zrobić przeprogramowałem i żyje . Jak to możliwe? A jak braknie prądu to co? Przecież to normalne, że czasami wyłączają zasilanie i potrafi wracać np. za 10 min, zanikać znowu i wracać po ok. 1/2h... Nie rozumiem-po odłaczeniu zasilania ten prostownik...
rozumiem, że gdy przerwanie bedzie miało taką postać: ISR(INT0_vect){ // np. inkrementacja globalnego licznika _delay_ms(1000); } to przy jednym naciśnięciu uzyskam zwiększenie licznika o jeden? Jeszcze jedno pytanie. Czy przy taktowaniu zegara wewnętrznego 1MHz dla mC Atmega16 będzie to delay równy dokładnie jednej sekundzie?
Przed PORTC |= ... musisz go wyzerować.
Dzięki za podpowiedź, ale niestety nie pomogło :( Umieściłem te zmienne jakos globalne i nadal nic się nie wyświetla :( SPI i DS1305 działa dobrze, bo jak wrzuce kod w pętle główną to mi to ładnie sekundy odczytuje i wyświetla, więc widoczenie coś jest nie tak z tym przerwaniem .. DS1305 powinno co 1 sekunde wystawiać flagę przerwania na INT0, a w Atmega16...
Sądzę po wszystkich wypowiedziach, że problem tkwi nie w nieprawidłowym, czy źle działajacym programie, a w jego organizacji logicznej. Dla wyświetlaczy led Bascom prawdopodobnie nie dodaje sam z siebie żadnych opóźnień, natomiast dla lcd to i owszem. Inkrementacja zmiennej może w programie przebiegać z szybkościa "wolnego elektronu na wysokości lamperii",...
Temat często powraca, a rozwiązania ... takie sobie. Skoro czas wykonania przerwania jest wyznacznikiem ilości obsługiwanych serw to go skróćmy. We wszystkich opisanych rozwiązaniach w przerwaniu wykonuje się lwia część logiki, a występujące rzadko przestawienia wartości to funkcje zawierające jedną instrukcję. Bez sensu. Proponuję zmienić format danych...
Dodano po 1 Dobra... Chyba mam źródło problemu... Chyba wina Windowsa, zaniosłem wszystko do kumpla, on ma se7en 64bit, ja 32... Po zaprogramowaniu u Niego działa wsio elegancko, u mnie nie... Winda aż tak krzaczy? :O
Witam wszystkich, Potrzebowałem uruchomić układ z większą ilością termometrów DS18x20, które będą rozlokowane w różnych miejscach domu i poza nim. Część z nich będzie wpływała na uruchomienie ogrzewania, inna część będzie tylko informacyjna. Jeszcze inna będzie miała za zadanie zabezpieczenie elektroniki przed przegrzaniem. Taki w ogólności jest zamysł...
Koledzy nie mogę sobie porzdzić z kodem. Chcę aby po naciśnięciu przycisku wartość zwiększyła się o 1 Dim I As Byte Do If Pinb.2 = 0 Then I + 1 If Pinb.3 = 0 Then I - 1 Pwm1a = I
Mam prośbę o sprawdzenie kodu, mam za zadanie zrobić układ Rezystora dekadowego sterowanego cyfrowo( rezystory zwierana przez przekaźnik) natrafiłem na mały problem, w 5 dekadzie gdy inkrementuje wartość dochodzi ona do 3 0000 i wraca na -25536 a powinno inkrementować się aż do 90000. Kod programu: #include <avr/io.h> #include <util/delay.h>...
Witam serdecznie! Mam problem z inkrementacją zmiennej Z, ponieważ wszystko opiera się o dokładność przedstawiania liczby zmiennoprzecinkowej. Zamiast 0,1 pokazuje 0,09. Próbowałem już fusing(), frac() (wskazywanie liczby po przecinku, chciałem tą resztę zaokrąglać round() ) , może format() ale tu trzeba non stop konwertować zmienne na znaki z liczb...
Mam do Was pytanie dotyczące fragmentu programu, w szczególności pętli for, która wykonuje się 16 razy i każde kolejne wykonanie trwa dłużej niż poprzednie. Czas trwania ostatniej pętli jest kilkanaście razy dłuższy niż pierwszej i przyrost czasu wykonania każdej pętli jest z grubsza liniowy. fragment programu: [syntax=c] void send_frequency(void) {...
Witam, Mam pytanie do bardziej doświadczonych w temacie mikrokontrolerów AVR gdyż mnie już się skończyła wiedza w tym temacie. Posiadam sterownik LED wykorzystujacy układ ATMEGA 16. Poszczególne składowe RGB sterowane są z wykorzystaniem modulacji PWM o częstotliwości 2KHz przy rezonatorze 16MHz. Zmieniłem częstotliwość modulacji PWM na 1,4MHz poprzez...
Proszę o pomoc w zwiększeniu częstotliwość fali nośnej, którą jest przebieg trójkątny. Mam kod który porównuje dwa przebiegi sinusoidalny i trójkątny, a na wyjściu generuje przebieg prostokątny. Jest to nic innego jak sinusoidalna modulacja szerokości impulsów PWM do sterowania falownikiem trójfazowym. Wszystko jest napisane w C, a procesor jaki użyłem...
Witam serdecznie forumowiczów. Jestem w trakcie budowy generatora sygnału PWM o zmiennym wypełnieniu oraz częstotliwości. Wypełnienie 0-100% co 5%, częstotliwość 1-50 kHz co 1 kHz (plus kilka częstotliwości poniżej 1k). Generator będzie częścią nieco większego projektu. Całość ma działać mniej więcej w taki sposób: odpalam timer1 w trybie PWM z korekcją...
Witam Próbuję zrobić miernik częstotliwosci na atmega16 poprzez zliczanie impulsów w czasie 1s. Max częst. to 20kHz (min. 20Hz) a więć po 1s będze 20 000 impulsów dla max częstotliwości. Dlatego do zliczania ich wykorzystuje licznik 16 bitowy T1. Do odmierzania czasu 1s chciałem wykorzystać licznik T0 z ustawionym preskalerem na 1024. Kwarc uk to 8MHz...
Witam Piszę powoli program do pomiaru obrotów na sekundę. Niestety nie do końca działa.Nie wiem co jest źle ale działa tylko wysw2 i pokazuje to co ma,czyli cyfrę1. Byłbym wdzięczny gdyby ktoś rzucił okiem i dał jakąś wskazówkę. ATmega16 8Mhz,wewnętrzny oscylator.JTAG wyłączony. [syntax=c] /*Deklaracje nagłówków*/ #include <avr/io.h> #include...
Witam. Mam problem z przesunięciem bitowym. Mam taki kod: long int wire_temp(void) { long int zmienna_w; int temp1, temp2; temp1 = 0xCBCF; temp2 = 0xEBAA; zmienna_w = ((temp2 << 16) | temp1); return zmienna_w; } i wynik działania jest błędny. zamiast 0xEBAACBCF jest 0xFFFFCBCF. Widać, że dwa najstarsze bajty się...
Witam Zaciąłem się podczas pisania programu na woltomierz. Układ opiera się o uC Atmega 16. Pomiar napięcia z zakresu 0 - 5 V. Wynik ma być standardowo wyświetlany na LCD 2x16. Procedury do obsługi lcd mam napisane. ADC wywołuje przerwanie w którym chce skonwertować otrzymany wynik na znaki wysyłane do LCD Zamieniłem już wynik z HEX na DEC. liczbę danej...
Witam drogich forumowiczów. Mam takie pytanie: napisałem program do obsługi wyświetlacza dwucyfrowego w trybie multipleksowania. Chciałem teraz za pomocą dwóch switchów zwiększać (zmniejszać) wyświetlaną wartość. No i to mi właśnie nie działa (samo wyświetlanie działa). Oto kod: #define F_CPU 16000000L #include <avr/io.h> #include <util/delay.h>...
Witam. Jeżeli piszę w złym dziale to z góry przepraszam. Mam liczbę int 1234 czy istnieje funkcja, która zamieniła by mi 12,34? I czy mogła by obcinać do 12,3? Nie musi być to int gdyż i tak zamieniam go na char. Z góry dziękuję za odpowiedzi.
witam, Na początku zaznacze,że metody które znalazłem na elektrodzie nie pomogły(może źle napisałem kod programu??). Chcę zwiększać jednym przyciskiem dwukrotnie prędkość pulsowania diodek.Problem tkwi w tym ze raz diodki przyspieszaja raz zwalniaja a raz nic nie robia. Procedura w celu eliminacji drgania stykow wyglada nastepujaco: 1.sprawdz czy S=0;...
C zawsze pod każdą postacią powodował drgawki, ale to czego przed chwilą nie udało mi się zrobić, przerosło mnie i muszę spytać się Was o co w tym chodzi: ... unsigned char i; int main(void){ while(1){ i++; if(i == 129){ i = 0; } } } ten program cały czas 'stoi' w miejscu int main(void){ a zmienna...
Witam. Napisałem program który ma sterować 2 licznikami w ATmega 16. Problem pojawia się w tedy gdy 2 liczniki zaczynają pracować razem ,ten drugi zaczyna przełączać przypadkowo i trzeba zresetować kontroler. liczniki sterują "układami świetlnymi. http://obrazki.elektroda.net/50_12262337... Dodano po 10 Problem pojawia się gdy licznik zaczyna...
Witam, mam układ do sterowania pracą silnika. Sterowanie na mosfetach, z Atmegi. Prąd ciągnę z zasilacza komputerowego. Niestety, nie mam kodu źródłowego, a program pozwala jedynie na zmianę wypełnienia w zakresie 0-70%. Dużo pracy byłoby z robieniem tego od początku, niestety do swoich zastosowań potrzebuję wyższych napięć, dlatego chciałem to odwrócić,...
Witam, mam problem z działaniem funkcji _delay_ms() - nie powoduje oczekiwanego opóźnienia w milisekundach - opóźnienie jest zbyt małe (około 20 krotnie mniejsze od oczekiwanego). Aby otrzymać prawidłowe opóźnienie musiałem utworzyć funkcję _delay_ms2().. kod poniżej. Na forum znalazłem podobny problem: http://www.elektroda.pl/rtvforum/topic10...
Witam!! Napotkałem się na dosyć dziwny problem... Dotyczy on zliczania impulsów i ustawieniu wyjścia po przejściu warunku. Poniżej przedstawiam kod który dotyczy tego problemu. #include <avr/io.h> #include <avr/interrupt.h> int imp=0; #define tau 251; double kat=0.0,x=0.0; unsigned int licznik=250; ISR(INT0_vect) { x++; kat=x*0.9;...
No właśnie Ci człowiek napisał. W najprostszym przypadku mierzysz, i jeśli masz za mało, to zwiększasz wypełnienie, jeśli za dużo - zmniejszasz. Niestety dalej musisz się zmierzyć z teorią regulacji - bezwładność, stabilność. Rozwiązanie standardowe - to PID. Do niektórych prostszych przypadków wystarcza prosty filtr dolnoprzepustowy wartości mierzonej...
Muszę rozpoznawać kierunek, ale nie mogę gubić impulsów (skoków). Impulsator będzie służył do nastawy pewnych parametrów. Ma to być na zasadzie jeden skok dekrementacja/inkrementacja - zależnie od kierunku. Dodatkowo impulsatorem będę sterował pewne menu wykonywanego urządzenia. Mój impulsator ma też wbudowany przycisk, więc jest do tego wręcz stworzony....
No właśnie- przerwanie od Timera co 16.384 ms a w przerwaniu tylko inkrementacja jakiejś zmiennej. No ale to Bascom- odkładanie na stos i zdejmowanie zajmie jeszcze kilkadziesiąt instrukcji po 0.0625us przy zegarze 16MHz. Ale nawet wtedy to będzie poniżej 6us. Wystarczy aby obsługa przerwania INT0 była krótsza od 16ms. Zwłaszcza że przerwanie zewnętrzne...
Spróbuj inicjalizację zrobić inaczej. Najpierw trzy razy wyślij 0x30, potem 0x30 co oznacza tryb 1 liniowy i znak 5 x 7, następnie 0x08 czyli wyłączenie wyświetlacza, następnie 0x01 co włączy wyświetlacz (niestandardowa instrukcja), i na koniec 0x07 czyli inkrementacja wskaźnika adresu i brak przesuwania zawartości DDRAM. To powinno wystarczyć żeby...
Witam! Dopiero zaczynam i nie mogę sobie poradzić z poprawnym zliczaniem w przerwaniu pochodzącym od Timera2 w trybie CTC. Chciałem wykorzystać programowe Timery, które są pomysłem Pana Kardasia (korzystam z jego książki) do tego aby jeden z nich tykał co 1sek. Zacząłem, więc tak: 16MHz/1024/125/125 daje teoretycznie "cyknięcie" co sekundę, a u mnie...
Pokaż cały swój program. Chciałbym mieć program ;) Na tę chwilę zastanawiam się jak go w ogóle napisać. Pomysł który opisałem kilka postów wyżej aby zliczać przerwania co 2 ms ma jedną poważną wadę - moim zdaniem obciąży znacznie CPU bo co 2 ms będzie odpalane przerwanie które z kolei musi wykonać kilka instrukcji - jakać inkrementacja + sprawdzenie...
Coś mi tu nie pasuje. Wg mnie transmisja powinna być dwubajtowa w czasie nSS i poniekąd pojedyncze rejestry można tak czytać/modyfikować. Taki protokół jak przedstawiłeś nie podoba mi się. Może jutro spojrzę na to innym okiem ;) Jeśli rzeczywiście jest inkrementacja to nie podaje się adresu w trakcie jednej transmisji.
Widzę, że sposób jest dobry, ale jakbyś mógł mi jeszcze tak po kolei ten kod wytłumaczyć.... proszę... . Chodzi mi o zmienne Polbajt, Id(index) oraz zmien. Ja licze to na kalkulatorze i wyniki mam do kitu, bo napewno nie wiem co mam gdzie podstawiać.. Nie wiem jaka wartość wyjściową ma zmienna Polbajt... Kursor_gora: Call Modyfikuj_polbajt(pozycja_kursora...
http://obrazki.elektroda.pl/2645142000_1... Sterownik diod LED został wykonany w celu automatycznego lub zdalnego sterowania oświetleniem LED w zależności od jasności w danym pomieszczeniu. Układ sterowania oparty jest o mikrokontroler ATmega16/ATmega32 firmy Atmel, który w zależności od oświetlenia w danym pomieszczeniu steruje jasnością...
Ok, moje błędy, niemniej wcale mi to nie pomogło, mówię, widzę brak inkrementacji z IDE Simulator po prostu.
Inkrementuję ją, żeby widzieć kolejne znaki z tablicy askii, na uart0 ładnie się wyświetlaja, a na uart1 krzaki. Bez inkrementacji jest to samo. Nawet jak dałem za whilem opóźnienie 1s nic sie nie zmieniło.
Przepraszam, przeoczyłem znacznie grubszy błąd. Problemem jest to, że inkrementujesz x i y zarówno w przerwaniu, jak i poza nim. Zupełnie nie wiem, po co to robisz, ale to na pewno nie zadziała dobrze - po drodze zgubisz parę inkrementacji, i żadne volatile na to nie pomoże. Możesz w pętli zerować zmienne, które inkrementujesz w przerwaniu, ale nie...
IRQ tester https://obrazki.elektroda.pl/3243423400_... IRQ Tester to proste narzędzie, głównie do testowania czasu odpowiedzi na impulsy, lub czasów międzyzboczowych dostarczonego sygnału. Program został napsiany na ukontroler AVR Atmega168, a jego głównym zadaniem jest funkcja multiwibratora monostabilnego, którego działanie polega...
to tylko przykładowy fragment, nie mam zamiaru zamieszczać całego kodu, dodam że całość działa, a z góry ustalone pojedyncze znaki wysyła do PC bez problemu. Chodzi mi, że nie wiem czemu nie chce wysyłać po inkrementacji. Hmm przerwanie timera nie chce mi jakoś działać, ale popróbuję. Nie powinno się użyć jakiegoś TIMERA, który zmienną czasową przechowywałby...
1. Nie mam pojęcia skąd wytrząsnąłeś instrukcje Rotate, może się podzielisz. 2. For sam robi inkrementacje więc I = I + 1 nie potrzebujesz 3. W związku z powyższym nie potrzebujesz tego Do Loop 4. Przy pętli For I = 7 To 0 potrzebujesz dodać Step -1 inaczej nie wykona żadnego kroku 5. Nie musisz drugą pętle kręcić odwrotnie przecież tylko odlicza ilość...
Witam po dalszych nocnych eksperymentach. Okazało się, że problem leży nie w konflikcie pomiędzy int0 a timerem, a w samej inkrementacji zmiennej single. gdy typ zmiennej, którą inkrementowałem w przrwaniu od int0 zmieniłem na word wszystko jst OK, dlaczego inkrementując single w tym przerwaniu dostawałem w wyniku jakieś śmieci po przecinku a i wartość...
zajmuję się profesjonalnie pisaniem aplikacji na AVRy W takim razie Ty powinieneś odpowiadać na pytania ;) po powiedzmy 50 (+-100) zaprogramowaniach EEPROMu, EEPROM pada (tzn. weryfikacja się nie powodzi). Dzieje się to cyklicznie w najprzeróżniejszych układach, które programuję. W tej chwili mam już trzy padnięte w ten sposób ATMegi (16-stki i 32-ójki),...
Łoł się kolega zniecierpliwił... Piszę nie dlatego, że gdzieś to przeczytałem tylko wiem z własnego doświadczenia, że takich rzeczy lepiej unikać. W ogóle stosowanie funkcji generujących długie opóźnienia (tysiące cykli zegarowych) nie jest dobrym pomysłem, bo przez ten czas nie ma się żadnej kontroli nad układem. Co do rozwiązania to zaproponowałem...
Aby kod łatwo było analizować używaj znaczniki SYNTAX: [syntax=c] tu wklej Twój kod [/syntax] Plik : HD44780.c Plik : HD44780.h Dodano po 25 Ja połączyłem je w ten sposób ale pewnie źle bo wystąpiły błędy w kompilacji. Proszę o pokazanie mi sposób połączenia tych dwóch plików w prawidłowy sposób. Pierwsze uwagi: - te dwa pliki to tylko...
Timer 1 potrafi działać w trybie CTC tak, że przy zauważeniu równej wartości licznika z rejestrem OCRA może sam zmienić ci stan jednej końcówki procka zwanej OCR na przeciwny. Włącz sobie taki tryb - to wtedy będzie ci to działać automatycznie - czyli bez procedury obsługi przerwania , w pełni sprzętowo. Aby to zrobić zaprogramuj bit COM1A0 czyli TCCR1A|=(1<<6)...
Koledzy, Jestem szczęśliwym posiadaczem impulsatora i walczę żeby go obsłużyć w C... Paranoja tkwi w tym, że w bascomie impulsator działa, a praktycznie ten sam program przepisany do C nie działa... Impulsator mam podłączony środkiem do GND jeden PIN na INT0(PD2) trzeci na(PD7). Na porcie C linijka diod. Poniżej listing programu: #include <avr/io.h>...
Zrobiłem cos takiego: //--------------------------------------... // Wyświetlacz alfanumeryczny ze sterownikiem HD44780 // Sterowanie w trybie 4-bitowym bez odczytu flagi zajętości // z dowolnym przypisaniem sygnałów sterujących // Plik : HD44780.c // Mikrokontroler : Atmel AVR // Kompilator...
Dzięki za wskazówkę, poszukałem trochę na forum i znalazłem taką wypowiedź: ...konfigurujesz timer1 do pracy w normalnym ale nie robisz start timer. robisz przerwanie dzialajace na zbocze np. narastające-> Dalej : robisz zmienną flaga w przerwaniu robisz if flaga=1 then start timer1 flaga=0 else stop timer1 w rej od timera masz czas... kopiujesz gdzie...
Witam! Chciałem być ambitny i się zaczęło... Początek projektu na procesorze AtMega16 (8MHz na kwarcu) i wyświetlacz HD44780 16*2, komunikacja 8bitowa z uwzględnieniem flagi zajętości. Układ i biblioteka obsługi wyświetlacza zaczerpnięta ze strony #include <avr/io.h> #include <util/delay.h> //--------------------------------------...
Witam, mam problem następującej treści: po podłączeniu lcd wc1602A w ten sposów R/W - GND E - PC2 RS - PC0 DB0-7 - PORTD 0-7 w wgraniu programu (korzystajac z biblioteki z radzia) #include <avr/io.h> #include <util/delay.h> #define LCD_RS_DIR DDRC #define LCD_RS_PORT PORTC #define LCD_RS (1 << PC0) #define LCD_E_DIR DDRC #define...
Cześć, Napotkałem problem przy wyświetlaniu na lcd WC1602E-STBLWNC06. Wyświetlałją się tylko i wyłącznie kwadraty. Piny podłączone nastepująco: Vdd - +5V Vss - GND RW - GND RS - PC0 E - PC1 DB4 - PC2 DB5 - PC3 DB6 - PC4 DB7 - PC5 Próbowałem przepinać piny na różne porty (A, D... ) i dalej to samo. Atmeg16 działa na zewnetrznym kwarcu 8MHz (próbowałem...
no tak programista z bozej laski nie dodal 2 klamerek, teraz jjuz nie wyrzuca bledow, pytanie tylko dlaczego ekran tak jakby miga nic nie wyswietlajac, co robie jesscze zle? funkcje na pewno sa dobrze poumieszczane, bo do innej czesci programu wszystko dziala, ale umieszcze caly program zeby nie bylo watpliwosci:: #include <avr/io.h> #include...
Ok. Już podaje: #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdlib.h > //makra DS18B20 #define WE 2 #define PORT_1Wire PINC #define SET_1Wire DDRC&=~_BV(WE) #define CLEAR_1Wire DDRC|=_BV(WE) //--------------------------------------...
[syntax=c] #include <avr/io.h> // dost?do rejestr?? #include <avr/interrupt.h> // funkcje sei(), cli() - obs?ga przerwa??include <util/delay.h> // _delay_ms / _delay_us #include <stdlib.h> #include <stdio.h> #include <string.h> #include <stdbool.h> // boolean #include <avr/io.h> #include <util/delay.h>...
Z tym PB3 to mój błąd. Druga nóżka tak jak piszesz jest podłączona do Vdd. Co do kodu to korzystam z http://radzio.dxp.pl/hd44780/. plik HD44780.h: [syntax=c]//----------------------------... // Wyświetlacz alfanumeryczny ze sterownikiem HD44780 // Sterowanie w trybie 4-bitowym bez odczytu...
Muzyka jest najbardziej uniwersalnym sposobem ekspresji. Niezależnie od języka, kultury czy wieku pewne idee przekazywane przez muzykę się nie zmieniają. Można bezpiecznie założyć iż każdy lubi muzykę - taki czy inny jej rodzaj. Każdy zna to uczucie gdy podczas słuchania naszego ulubionego kawałka nóżka sama lata do rytmu albo ręką przebiera po niewidzialnym...
http://obrazki.elektroda.net/49_11944242... Projektem, który tu przedstawiam jest tablica wyników (z góry przepraszam za jakość zdjęć robionych w ciemności "z ręki") . W temacie mamy przymiotnik "prosta" . Rzeczywiście tablica miała spełniać tylko podstawowe i niezbędne funkcje - tak też się stało. Ale do rzeczy... Chcę zaznaczyć, że jest to moje...
bascom inkrementacja inkrementacja przerwaniu inkrementacja przerwać
kupno transformatora toroidalnego brother sprawdzić poziom tonera paliwowy przewód ciśnieniowy
instrukcja programator mastercook instrukcja obsługi
Lokalizacja złącza + w radiu Becker Mexico Jak ominąć blokadę Google na Motoroli Moto G5?