Wypróbuj ten kod: [syntax=c] #define F_CPU 16000000 #include <stdlib.h> #include <avr/io.h> #include <util/delay.h> //-------LCD------------------------ #define LCD_ADDRESS (0x7C) /* * LCD_commands */ #define LCD_CLEARDISPLAY 0x01 #define LCD_RETURNHOME 0x02 #define LCD_ENTRYMODESET 0x04 #define LCD_DISPLAYCONTROL 0x08 #define LCD_CURSORSHIFT...
Stan początkowy zapewne ustawia się jako ustawienie wyprowadzenia w odpowiedni stan przed startem licznika. Tylko jak ty chcesz osiągnąć to 90stopni?
Witam Jako jedno z możliwych rozwiązań podaję kod poniżej. Oczywiście należałoby go traktować jako szkielet i dopracować. $regfile="m8535.dat" $crystal=8000000 Config Timer1=Timer, Prescale=1024 Config Portc.0 = Input : K1 Alias Pinc.0 Config Portd.0 = Output : Wy_1 Alias Portd.0 Config Portc.1 = Input : K1 Alias Pinc.1 Config...
Proszę, gotowy przyklad rozwiązania. Napisałem przy kawie i potestowałem w symulatorku czy się nie pomyliłem gdzieś ;) [syntax=basic4gl]$regfile = "m8def.dat" '$sim 'dla symulatora Config Portd.5 = Input : Set Portd.5 : Czuj_1 Alias Pind.5 Config Portd.6 = Input : Set Portd.6 : Czuj_2 Alias Pind.6 Config Portd.7 = Input : Set Portd.7 : Czuj_3 Alias...
Witam serdecznie potrzebuje zrobić licznik impulsów tzn. ustawiam żądaną wartość np. 2 i po naciśnięciu przycisku 2 razy załącza mi się przekaźnik w impulsów ,naciskam przycisk znów dwa razy i znów załącza się przekaźnik także w impulsów i tak w kółko dodam iż chciałbym to zrobić na wyświetlaczu LED znalazłem w sieci avt1824 lecz niestety avt nie udostępnia...
Najprościej to chyba tak: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #define TIMERSTART 6 volatile uint8_t FLAGA_50 = 0; volatile uint8_t FLAGA_1000 = 0; // funkcja obslugi przerwania TIMER0_OVF 8MHz / 64 * 250 wychodzi co 2ms // dla innego taktowania nalezy ustawic inny preskaler i/lub inne liczniki stawiania flag ISR(TIMER0_OVF_vect)...
a ustawiłeś Fuse Bity?? Bo jeśli nie masz ustawionych to ATmega pracuje z częstotliwością 1MHz. Musisz ustawić Fusy na albo 8MHz na wewnętrznym generatorze albo ustawić Fusy na zewnętrzny kwarc. i mniej więcej kod by tak wyglądał: $regfile = "m8def.dat" $crystal = 8000000 Cursor Off Dim Czestotliwosc As Long Const Licznik = 22336 Config Timer1...
KEYBOARD_KEY_TIMEOV skąd się to bierze? Ogólnie widziałem że używasz real-time do domierzania opźnień. Jak I2C się pogubi to i program stanie. Przesiądź się na arduinową funkcje millis() lub w przerwaniu od jakiegoś timera zrób własne liczniki czasu, niezależne od zewnętrznego zegara. millis() zwraca czas w ms od uruchomienia systemu, w dużej zmiennej....
Zgodnie z sugestią ZbeeGin napisałem od nowa program pozbywając się większości goto, niestety dalej wychodzi na to że program w pętli głównej działa zbyt długo i nie zdąża z odczytem wartości z tabeli pomiędzy kolejnymi przerwaniami. [syntax=vbnet] $regfile = "m2560def.dat" $crystal = 16000000 '$sim Config Lcdpin = Pin , Rs = Portk.0 , E = Portk.1 ,...
Wydaj mi sie że brakuje ci polecenia => gate=internal Sprawdź: Config Timer1 = Timer , Gate = internal, Prescale = 1 Enable Interrupts : Enable Timer1 Aha, jeszcze => Start Timer1 hmmm... nie ustaliłeś trybu pracy licznika a instrukcja Load jest dla timera w trybie z automatycznym przeładowaniem
To o czym piszesz to jest implementacja konkretnego algorytmu którego się trzymasz. Najwidoczniej nie najlepszego, skoro 16MHz nie wystarcza żeby odpowiedzieć na prosty impuls. Jak wrócę do projektu (może jeszcze jutro) to pokażę kluczowy fragment programu w C, rozwinięcie assemblerowe i oscylogramy. Dodano po 9 No i przy okazji jestem prawie pewny,...
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 Chciałem zbudowac układ który liczył by 0-9 i wyświetlane to było na siedmiosegmentowym wyświetlaczu... .......... prosze o pomoc i o jakies proste wytłumaczenie moich błędów. myslalem jeszcze o robieniu tego za pomoca rozkazu INC i dodawania tylko nie wiem jak zawartośc rejestru wystawic na wyjscia z gory dziekuje za pomoc pozdrawiam Tu masz...
[syntax=c] char wynik1[3]; //bufor1 dla LCD char wynik2[2]; //bufor2 dla LCD [/syntax] Te bufory są za małe na przechowanie warości zwracanych przez itoa. Nie wziąłeś pod uwagę null termination stringa. Twój program jeżeli działa to przypadkiem;) Jeżeli chcesz to możesz wząć jakąś uproszczoną wersję itoa. Np przerobić coś istniejącego z internetu. [syntax=c]...
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...
Witam Mimo, że większość proponowanych tutaj rozwiązań podłączenia RFM12 do Atmegi wykorzystuje SPI programowe, ja podłączyłem tradycyjnie, przez SPI sprzętowe - mimo, że nie miałem problemów z wgrywaniem kodu do Atmegi spiętej z RFM12, to uruchomienie ich razem jest problematyczne ( każde osobno działa bez problemu ) [syntax=basic4gl] $include "Config_AVR-DOS.BAS"...
Witam Walczę z wysyłaniem danych do Domoticz. Domoticz zainstalowany na Orange Pi Zero działa poprawnie. Wykorzystałem sposób wysyłania do ESP8266 Kolegi Niveasoft. Co prawda wysłał on dane do Thingspeak'a, ale nieco go przerobiłem. [syntax=vbnet] If Flaga_wyslij = 1 Then Domoticz_idx = "12" Domoticz_data = "16.8" Flaga_wyslij = 0 Flaga_esp_send = 1...
Witajcie. Zacząłem eksperymentować z odbiornikiem RFM12B na 868 MHz. Jednak stanąłem na samym początku przez ... zmienne. Nie wiem co jest grane. Gdy mam taki oto kod: int main(void) { unsigned char ik, ChkSum; register unsigned char licznik; START(); LCD_INIT(); LCD_print (0,0, "ATMEGA 8 [test]");...
witam Temat być może jest trochę mylący. Ale do rzeczy. Bawię się zestawem zl3avr i jestem na etapie obsługi transmisji w kodzie RC5 w asemblerze. W książce "Mikrokontrolery AVR ATmega w praktyce" podane są gotowe programy do nadawania i odbierania wiadomości w RC5. O ile procedurka nadawania nie budzi żadnych moich wątpliwości, o ile w przypadku odbierania...
Kod w C, ale powinieneś łatwo dojść co i jak: [syntax=c] for(uint8_t count=0;count<8;count++) { if(zezwolNaOdliczanie&&(1<<... { if(!OdliczanieMinuty[count]&&!Od... { if(OdliczanieGodziny[count]) { OdliczanieMinuty[count]=60; OdliczanieGodziny[count]--; } } if(!OdliczanieSekundy[count]) { if(OdliczanieMinuty[count])...
S-1200 też można kupić z I/O, profinetem, szybkimi licznikami. No ale nadal jest to goły sterownik i praktycznie bez użyteczny. Bez automatyki którą się steruje. Bez napędów, bez czujników, bez pneumatyki. Ceny małe nie są. Można podłączyć przyciski i lampki za kilka złotych. Z tym że to bardzo szybko okazuje się że jest to za mało.
Dzięki wielkie- ale to nie do mnie pisałeś. O Atomic_Block dowiedziałem się w czwartek- sprawdziłem- od czwartku jest to pierwsza wiadomość na ten temat. A wracając do tematu Fir3man- wymyśliłem taki schemat programu: #include <stdint.h> #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> volatile uint8_t dol;...
Piszesz, że masz doświadczenie z LCD i Atmega8. Więc mogę Ci pomóc to zrobić.
Witam. Mam taki problem. Próbuję skomunikować ze sobą dwa uC. Docelowo będą one skomunikowane po RS485, ale teraz w fazie testów próbuję je połączyć normalnie po UARCie. Skrosowałem TXD i RXD dwóch Atmeg. Wysyłam z Atmega162 znak 0x3A, natomiast na Atmedze32 włącza się przerwanie od odebrania (dioda niezależna od znaku odebranego się zapala ) ale nie...
Bascom sam się nie zajmie resetowaniem Watchdog'a, jak słusznie zauważył Holy . Żeby z niego skorzystać najpierw trzeba go skonfigurować (ustawić stopień podziału - od tego zależy czas potrzebny na przepełnienie jego licznika) poleceniem CONFIG WATCHDOG = czas , później uruchomić: Start Watchdog . Teraz w newralgicznych punktach programu musi zostać...
No tak , ale bez sensu jest mieć 3 zegary z 3 PCF i po miesiącu mieć na nich różne "godziny". Pomyślałem jeszcze że PCF zamontuje do 1 M16 a do 2 pozostałych wezmę tylko impuls sekundowy do zwiększania licznika zegarów. To chyba będzie dobre rozwiązanie. Minus tego jest taki że ,po wyłączeniu zasilania trzeba będzie każdy zegar ustawić oddzielnie i...
$regfile = "m32def.dat" $crystal = 1000000 Config Timer0 = Timer , Prescale = 1024 On Timer0 Tim0_wakeup Enable Timer0 Enable Interrupts Do 'Jakiś program . . . Do Start Timer0 Idle Tim0_wakeup: Stop Timer0 Timer0 = 0 Incr Pamiec Loop Until Pamiec = 5 ' Ma się usypiać 5 razy 'Dalsza część programu wykonywana po przebudzeniu . . Loop Niestety...
Nie,ma liczyć litry tak jak dystrybutor . Dodano po 2 Nie wiem w jaki sposób dodawac litry do zmiennej po przekroczeniu okreslonej liczby impulsów z przepływomierza to co znalazłem to liczone wszystkie w czasie a tu chyba chodzi o przepełnienie licznika Czas tu nie ma znaczenia! Użyj dowolny timer w charakterze licznika (Counter), i tak jak sugerowano...
Witam, Przesiadłem się właśnie z procka ATmega 16 na Atmegę 162 z powodu nie wystarczającej liczby portów. Napisałem program który ma za zadanie włączyć TIMER1 w tryb licznika z sygnałem taktującym na porcie PB1(T1). [syntax=asm].include "m162def.inc" .cseg .org 0 rjmp reset reset: cli ldi R16, low(ramend) out SPL, R16 ldi R16, high(ramend) out SPH,...
Witam:) mam pytanie do forumowiczów w sprawie pomiaru częstotliwości, sprawa przedstawia się następująco: chciałbym zrealizować pomiar częstotliwości .............. wiem ze należy postąpić w poniższy sposób: 1. zatrzymanie zliczania impulsow z T0 2. zatrzymanie odmierzania czasu bramkowania T1 3. przepisanie zliczonych impulsów do rejestru głównego...
Witam, kolejną częścią mojej pracy inżynierskiej jest sterowanie czasowe lampy sodowej. Chciałbym Was prosić o jakieś bardziej sensowne sugestie i propozycje wykonania takiego sterowania. Ma wyglądać to tak: - aplikacja C# posiada funkcję gdzie ustawiam sobie czas włączenia i wyłączenia lampy, następnie po ustawieniu wysyłamy przez UART te dane do procka...
Cóż, a gdybym co sekundę synchronizował zegar w Atmedze (z danych GPS). W takowej odpaliłbym Timer i liczył np. od 0 do 15 milionów, - 15 milionów cykli to była by jedna sekunda, jednakże po ++ zmiennej dodałbym warunek przerywający cykl liczenia (w momencie otrzymania impulsu) i w ten sposób obliczył sobie część sekundy? Jeżeli licznik dobije do 15...
Witam, Pomysł dobry ale sypie się najprawdopodobniej z powodu zbyt dużej ilości przerwań. Proponuje projekt sterownika "równoległego", taki wykorzystałem w mojej pracy inżynierskiej. Wprawdzie korzystałem tylko z 8 serw ale 16 też obsłuży po drobnej modyfikacji. Program zabiera większość mocy procesora do obsługi przerwań ale tylko przez czas 2ms potem...
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...
A proszę bardzo wersję: Compiler version: 2.0.2.1 Compiler build: 2.0.2.1.0 IDE version: 2.0.2.0 Windows OS: Windows 7 Proffesional SP1 Oryginał legalny nie ma się czego wstydzić. Timera używam tylko jednego z odmierzaniem około 5 sekund. 'konfigurujemy timer wywoływany co jakiś czas (patrz procedura) Config Timer0 = Counter , Prescale = 1024...
Na AT90S8535 zrobiłem sobie licznik impulsów i elegancko zlicza. Zrbiłem to na dwa sposoby (poniższy kod) z wykorzystaniem jednego timera i bardziej dokładny z wykorzystaniem 2 Timerów. Najgorsze jest to że gdy wsadziłem ATmega8535 na lcd pojawia mi się zero tak jakby counter w ogóle nie zliczał impulsów. Zegar procków (7.372.800 Hz) ten sam. Co jest...
Witam Czy istnieje w modułach bluetooth coś w stylu flagi nawiązania połączenia tzn. master zapala flagę gdy sparuje się ze slavem, a gasi ją gdy połączenie zostanie przerwane? Program miałby działać tak: Po nawiązaniu połączenia między mikrokontrolerami (ATmega32A i ATmega8L) za pomocą nadajników bluetooth przesyłany jest ze slave'a do mastera klucz...
ilmenauer -> już mi się dużo rozjaśniło. Ale podłączenie tych czujników ma być takie jak na schemacie? Próbowałem podłączać ale nie było reakcji. Zasilanie czujnika 5V. Atmega reagowała na pojawienie się "0", tylko chyba miałem włączony pullup, nie pamiętam. Dla obu schematów konfiguracja ma być identyczna? Zbudowałem układzik, w jaki sposób obliczyć...
Mam dziwny problem ze znikającym jednym tickiem w liczniku gdy są włączone przerwania przy przepełnieniu. Licznik pracuje w trybie normalnym, taki sam efekt przy 8 i 16 bitowym, zaobserwowałem na atmedze 16 i 644P (bo takie miałem akurat pod ręka). Normalnie bez przerwań, licznik przy przepełnieniu zeruje się i zaczyna liczyć od 0, wszystko tak jak...
a więc przerobiłem kod tak jak umiałem #include <avr/io.h> #include <avr/interrupt.h> void setup() { Serial.begin(115200); } //Counts overflovs volatile uint16_t T1Ovs1, T1Ovs2; //Variables holding three timestamps volatile uint16_t Capt1, Capt2; //capture Flag volatile uint8_t Flag; //Initialize timer void InitTimer1(void)...
Witam. Jak widać jest to mój pierwszy post na tym forum. Na wstępie chciałbym prosić o wyrozumiałość - jeżeli temat znalazł się w nieodpowiednim miejscu, popełniłem jakiś błąd w składni tytułu czy coś tego typy, prosiłbym moderatora o poprawkę i pouczenie jak w przyszłości uniknąć powielenia problemu. Jestem w trakcie pisania pracy inżynierskiej dotyczącej...
Sporo tego ( obsługa SD, PCF8563 + menu do ustawiania daty, obsługa PCF8574 w przerwaniu INT1 )- ale nie ma problemu - zmieniła się tylko zawartość podprogramu Pomiar była taka, jak w pierwszym poście oraz wyłączyłem w wyświetlanie na LCD tych wartości wskazań z DS18B20, oczywiście dostosowałem pozycje wyświetlania do LCD 4*20 - załączniku spakowany...
Witam, Próbuję uruchomić przerwanie timera 0 w ATMega8583 i jakoś nie mogę. W założeniu ma być to tryb pracy normalnej - licznik krąży i jak się przepełni to następuje przerwanie. Pewnie robię coś nie tak, tylko nie wiem co. Próbuję tak (to tylko fragmenty kodu dotyczące przerwania): .CSEG .ORG 0x0000 rjmp reset .ORG OVF0addr rjmp timer_0 reset:...
Inicjalizacja wyglada tak: 00110000 -> 3 razy 00111000 00001000 00000110 00001100 00000001 Sterowanie 8 bit Dodano po 1 Oto program: #include "avr.inc" #include <m8515def.inc> .cseg .org 0x00 Rjmp Start ;wyświetlacz #define LCD_E PD1 #define LCD_RS PD0 #define LCD_DDR_CTRL DDRD #define LCD_Port PortA #define LCD_DDR DDRA ;Definicja...
Dla małych kontrolerów, w stylu ATmega, z powolnymi zegarami, trzeba by chyba napisać kod w ASM, aby mieć kontrolę nad tym, ile taktów zegara zajmuje wywołanie przerwania, włączenie lub wyłączenie licznika, bądź też jego przeładowanie. Dostępne są tylko liczniki 16 bitowe, więc trzeba byłoby je regularnie przeładowywać i zapamiętywać ilość przeładowań,...
Bajki opowiadasz... Już powoli łape, ale jeszcze nie do końca. Błędem jest zapisanie Timer4=XXX, bo to nie zmienia wartości TOP w trybie CTC a wartość licznika. Należy zmienić wartość OCR2A, ale tej nie rozpoznaje mój kompilator, najnowsza wersja zaś rozpoznaje, ale ma ograniczenie. [syntax=basic4gl] 'Sprawdza Timer2 $regfile = "m1281def.dat" $hwstack...
Jest tego sporo, DCF77, 7 x DS18B20 i DHT11 ( akurat jeśli chodzi o niego to mam wątpliwości, czy ten kod działa, bo jest na obydwu płytkach podpięty i zdarza się zawieszenie ) Nadajnik Atmega328p Dodano po 16 Odbiornik Atmega644P - trochę zmieniłem obsługę przerwania, wydaje mi się, że w przerwaniu nie powinno się wykonywać dużych obliczeń. [syntax=basic4gl]...
Mi nie chodzi konkretnie o przerwanie. Jest tak: Timer t0 pracuje w trybie asynchronicznym i co 0.5s generuje przerwanie Ja w tym przerwaniu sprawdzam zawartosc rejestru TCNT odpowienio przeliczam ilosc impulsow ktore zliczyl i wyswietlam. SIGNAL(SIG_OVERFLOW0) { Rpm = TCNT2; Speed = TCNT1L; outp(0x00, TCNT3); outp(0x00, TCNT1L);...
Witam. Jestem poczatkujacym w C i powili uruchamiam sobie kolejne moduly proca atmega128, napotkalem niestety na problem w uruchomieniu timera1, wyglada na to ze wogole nie startuje bo nie wchodzi mi w obsluge przerwania przepelnienia licznika, ma to dzialac tak ze przy kwarcu 11.0592MHz po odpowiednim zaladowaniu licznika ma mi zapalac diode co ok...
Funkcja DZIAŁA [syntax=cpp]//Data utworzenie: 20-09-2014 #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <avr/pgmspace.h> #include "MYUART/myuart.h" #include "MK_TERMINAL/mk_term.h" #define REF_256 (1<<REFS1)|(1<<REFS0) #define REF_VCC (0<<REFS1)|(1<<REFS0) #define SR 8 typedef...
Problem dla mnie pojawił się ze zrozumieniem wektorów przerwań które obsługują timer1. W dokumentacji jest tabela na stronie 46 W czym problem? Jak korzystasz z przerwania np. Timer/Counter1 Compare Match A czyli przerwanie w momencie gdy zawartość licznika (TCNT1) zgadza się z tym co wpisałeś do OCR1A to jeśli wcześniej w TIMSK ustawisz odpowiedzialny...
Witam. Mam taki problem, gdyż chciałbym ogarnąć komunikację poprzez UART między dwoma mikro. Mam dwa uC: Atmegę 16, która działa jako master oraz Atmegę 88 jako Slave (na której będzie termometr, z którego będę odczytywał dane). Programy, definicje wyglądają następująco: plik RS485.h #indef RS_INT_H #define RS_INT_H //rozmiar buforów nadawania i odbierania...
Po kompilacji programu atmega powinna zapodac sygnały na portach: PB1,PB2,PB3 - są to sygnały na 3 serwomechanizmy. U mnie właśnie nie ma tych sygnałów. Poniżej Kod programu: [syntax=cpp] #define F_CPU 1000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <string.h> #include <avr/signal.h>...
Moim zdaniem teraz program powinien działać poprawnie. Skoro nie działa należy dodać pewne elementy porządkowe. Jednym z nich jest włączanie i wyłączanie Timera0, a drugim resetowanie licznika preskalera Timera0. Ten pierwszy powinien polegać na tym, że Timer 0 powinien startować w momencie przerwania Timer1, a zatrzymywać się, w momencie odliczenia...
Witam, Mam problem z obsluga przerwan od przepelnienia licznikow. W projekcie wykorzystuje 3 liczniki w atmega8, timer2 wykorzystuje do generacji sygnalu 40kHz natomiast pozostale dwa maja zliczac czas od nadania sygnalu do otrzymania echa. Narazie napisalem osobną obsluge kazdego z timerow i dzialalo. Po wrzuceniu wszystkiego do jednego projektu dziala...
Ja widzę że Hantek6022BE ma do 35Vpp. Ale mniejsza o to. Jak masz sondę 1:10 (a masz) to możesz mierzyć napięcia do 350Vpp (o ile sonda na to pozwala, ale zdecydowana większość pozwala, zobacz w opisie swojej). W każdym razie pierwsze testy rób po stronie niskiego napięcia. Jeden kanał podłącz do impulsów przejścia przez zero, i to ten kanał wykorzystaj...
Witam. Jak w temacie zlecę zaprogramowanie Arduino UNO R3. Sterownik ma obsługiwać licznik/sterownik impulsów. Skład zestawu: Arduino: ARDUINO UNO R3 ATMEGA328 CH340 AVR KLON MODUŁ https://obrazki.elektroda.pl/7110110800_... Ewentualnie: Arduino UNO R3 ATMega328 100% zgodność + kabel USB https://obrazki.elektroda.pl/8336046000_...
Więc tak. Skoro łączysz oba układy RSem to po co ci jeszcze jakieś przewody do wywoływania przerwań? Pewnie dlatego, że na tyle ile umiem obsługiwać RS tak sobie radzę :P ogólnie miałem taką wizje, żeby oba układy pracowały normalnie w spoczynku bez siebie. Na panelu np mam godzine, a na tym drugim układzie temperature odczytaną z LM35. A przerwania...
hmm panowie fajnie poczytać wasze opinie na takie tematy jednak chyba nie idą one w temat mojego problemu. Użyłem case i juz wiem ze to jest nie właściwa instrukcja warunkowa. Doprzygotowania swojego menu wykorzystałem if-y jednak przy kilku poziomowym menu troche sie w tym zamieszałem i gdybyście szanowni koledzy pomogli mi troszke zoptymalizować kod...
Kolego Gienek a po co kalibrowac wewnetrzny zegar jezeli kolega napisal ze procesor chodzi na kwarcu 32khz. Dla mnie wypowiedz kolegi jest sprzeczna. Kolego keramstwo chyba do końca nie rozumie konstrukcji tych procesorów. Ten wolny kwarc jest podpinany jako zegar RTC do licznika T2. Ale wewnętrzny generator (używany między innymi do określenia prędkości...
Skoro nie chcesz aby wszystkie startowały jednocześnie to ich jednocześnie nie ustawiaj. A u Ciebie jest: [syntax=c]PORTB |= SERVO1 | SERVO2 | SERVO3 | SERVO4 | SERVO5;[/syntax] Możesz to zrobić tak(nie zawracając sobie głowy optymalizacją): [syntax=c]ISR (TIMER1_COMPA_vect) { if (warunek serwo 1) { PORTB |= SERVO1; { if (warunek serwo 2) { PORTB |=...
To że procesor jest 8śmio bitowy, nie znaczy że nie posiada rejestrów 16 bitowych lub par H i L. Posiada np. liczniki/timery 16 bit, ADC 10 (ale może być i 12 lub 16bit) itd. Przetwornik ADC jest 10 bitowy sprzętowo (nie wiem jak miałby być programowo:). Procesory 8 bit mają najczęściej większość rejestrów 8 bit, wykonują większość operacji na 8 bitach...
Jak ustawic timer 1 żeby liczyl 16bit a nie 8? bo to co napisalem ponizej to zawsze tylko liczy w TCNT1L a to co wpisałem w TCNT1H automatycznie wymazuje przy kolejnym cyklu dlaczego? :( .cseg .org 0x00 rjmp start .org 0x06 rjmp timer1 .org 0x11 Start: Ldi Acc, 1; ustaw preskaler timera 1 na 1 Out TCCR1A, Acc Out TCCR1B, Acc Ldi Acc, 0x80 ; wpisz wartosć...
Dodano po 8 Myslałem zeby to zrobić w taki sposób ale widocznie tak sie nie da :-) A to schemat: http://obrazki.elektroda.pl/8873470300_1... Dodano po 2 W programie chodziło mi o to aby potencjometr P1 ruszał serwem1,2,3. Potencjometr 2 miał by ruszać tylko serwami 2,3. Potencjometr 3 ruszał by tylko serwem3 Dodano po 21 W tym programie...
Trochę czasu sterownik był już testowany ;) Czy można liczyć na udostępnienie kodu sterownika? Każdy ma swój rozum i musi się liczyć z tym, że nie jest to produkt komercyjny testowany przez X osób i sterownik może działać wadliwie. No w sumie 2 miesiące bezawaryjnej pracy praktycznie daje już jakieś minimalne poczucie bezpieczeństwa. Oczywiście w tym...
Na pierwszy strzał wymieniłbym ten potencjometr montażowy skatowany ogromnym wkrętakiem na dobry osiowy Wymieniony na Telpod 4,7k Czy Twój sterownik ma regulację prądu na silnik? Tak najpierw sprawdzam, czy sterownik prawidłowo steruje. No wydaje mi się, że dobrze steruje dlatego, że obraca się prawidłowo tylko gubi kroki. Nie mogę sprawdzić przebiegu...
Atmega jest taktowana zewnętrznym kwarcem 12MHz, żeby jeden tick timera trwał ~1us. 1. Czy timer 8-bitowy przyjmujący zewnętrzne impulsy, może je przyjmować w takich samych odstępach czasowych jak 16-bitowy? Niestety na etapie projektowania nie zauważyłem, że żeby użyć 16-bit timera do przyjmowania impulsów zewnętrznych należy użyć nóżki T1, a nie T0,...
nie wiem dlaczego ale po dwukrotnym wpisaniu uruchamia się na ok 2,2sek :), ale po tym czasie niestety licznik prawdopodobnie się przepełnia i następuje reset.. oczywiście zeruje licznik komendą asm("WDR"); po odpowiednio krótszym czasie, ale to nic nie daje.. może jest inna komenda resetująca wdog'a o której nic nie wiem a ktoś wie? - oczywiście tylko...
Jeśli wartości ładowane do rejestrów OCR3B i OCR3C będą mniejsze niż OCR3A to da się te wszystkie przerwania z porównań wykorzystać. Programik testowy (ASM): .include "m128def.inc" .cseg .org 0x00 rjmp start .org OC3Aaddr rjmp _ctc_isr .org OC3Baddr rjmp _oc3b_isr .org OC3Caddr rjmp _oc3c_isr .org 0x50 start: ldi r16, high(RAMEND)...
wynik końcowy faktycznie za każdym razem jest inny. (at) emarcus możesz podpowiedzieć jak powinien wyglądać serwis int1? Popatrzyłem troche bliżej na twoj kod. Z jakiego powodu potrzebujesz otrzymać wynik ("Czas_2") z dokładnocią aż do 9 miejsc decimal? Jeżeli jeden z czynników iloczynu (rozdzielczość timera) jest liczbą wymierną z dokładnościa do...
Trudno się z tym zgodzić. Jeśli po adresie kolejnym polem jest size to z góry wiemy ile znaków jest do odebrania. Taka detekcja końca ramki jest IMHO bez sensu (albo czegoś tu nie rozumiem), bo przecież w ciągu danych mogą się znaleźć takie same znaki. A co jeśli te dane nie dotrą? Ile czasu przyjąć na reset liczników? Jeżeli nawet wychwycimy trzy...
Można np tak: $crystal = 1000000 $regfile = "m32def.dat" Config Int0 = Rising Config Int1 = Falling Config Timer1 = Timer , Prescale = 64 Stop Timer1 On Int0 Irq_int0 On Int1 Irq_int1 Enable Int0 Enable Int1 Enable Interrupts Do Waitms 100 Loop End Irq_int0: Start Timer1 Return Irq_int1: Stop Timer1 return Pozdrawiam...
Witam,. Mam następujący problem: Przetwornik analogowy na ADC pin 1 Przetwornik częstotliwość na Timer0 max232 1uF Kwarc 8Mhz i atmega16L Na kablu ze złączkami BNC mam połączenie atmega -> przetwornik czestotliwosci (2 kolumna). Wydaje mi się, że wszystko dobrze zlutowane oraz nie ma przerw w kablu BNC. Kabel mam 50 Ohm. Podczas wysyłania danych na...
Niewiem czy dobrze rozumiem ale chyba będzie problem bo na moim kalkulatorze wychodzi że 16000000/15000=1066,7 a w nocie pisze że dla Timer1 prescaler może być max 1024 75 ? Czy to się jakoś zaokrągla do pełnej liczby?
Obecnie taki odbiór rozwiązuję inaczej, ale w Twoim wydaniu coś czuję że to nie odbiór danych przy taktowaniu 16MHz zajmuje dużo czasu a bardziej wyświetlanie tego na LCD. Jeśli by Ci to odpowiadało to możesz: odebrac dane, i zrobić z nich tą tablice stringów po czym ustawić jakąś flagę "Refresh_lcd" Potem w każdym przejściu pętli wyświetlać/odświeżać...
Spoko :) Coś w tym stylu. Musimy jakby podzielić na dwa etapy: 1. losowanie i start odliczania (świecenia ub wygaszenia 2. odliczanie aktualnego stanu dla uproszczenia w światłach strobe przyjmijmy odliczanie do tyłu (do zera) czyli trzeba nam warunki Dodano po 1 poprawiłem algorytm
Poniżej wrzucam kod odnośnie przerwań. Używam 4: 1) Od konwersji ADC 2) Od przyjścia znaku na USART 3) Od przerwań zewnętrznych 4) Od przepełnienia timera do update zmieannych Po krótce ma on działać tak: jeżeli pojawi się coś na USART to przerwij i sprawdź co to za znak. Zrób odpowiednią funkcję. Jeżeli jest to jeden ze specjalnych znaków to przychodzi...
Czyli np jeżeli chce zmierzyc czas trwania impulsu to robię to tak - while(jakis_warunek) { -ustaw przerwanie na zbocze narastające -uruchom timer -ustaw przerwanie na zbocze opadające -odczytaj timer, wyzeruj rejestry timera } Czy takie coś zadziała?? Czy jest możliwość skonfigurowania dwóch osobnych przerwań na zbocze narastające i opadające czy za...
Witam, zlecę budowę prototypu licznika impulsów z tarczy wału korbowego samochodu. Do rzeczy: Mikrokontroler : Atmega 16 lub 8 (do uzgodnienia) może to być również coś innego. Jednak musze to zaakceptować ze względów budżetowych. Załącznik przedstawia rodzaj sygnału jaki będzie docierać do mikrokontrolera. Program musi wykryć brak jednego zęba (widoczne...
U mnie (Katowice) z DCF77 nie ma problemu, oczywiście zdarza się, że przez jakiś czas nie działa, ale przecież nie musi - wystarczy że złapie sygnał od czasu do czasu. Z tego co zauważyłem, to strasznie przeszkadza w odbiorze DCF77 komputer. Kiedy miałem zasilane układy przez USB to generalnie był problem, gdy je zasilałem osobno - z sieci lub z baterii...
Mam mały problem chcę zrobić prosty miernik częstotliwości w bascomie do ok. 600KHz Warunek ma mierzyć z dokładnością 1Hz i niestety nie wychodzi mi to. Taimer 1 mam skonfigurowany jako taimer (Config Timer1 = Timer , Prescale = 8) taimer 0 skonfigurowany jako licznik (Config Timer0 = Counter , Edge = Falling ) z resztą zamieszczam fragment kodu [syntax=basic4gl]$regfile...
Pierwszy i bardzo poważny problem zauważyłem w funkcji TIMER1_COMPA, jest nim linijka rjmp uspij. Gdy się wykona, to przerwania pozostaną zablokowane, oraz kilka bajtów na stosie zostanie uwięzionych - głównie adres powrotu z przerwania. Można temu zaradzić poprzez wstawienie pop + pop + sei przed rjmp. Drugi problem, to karygodna pętla główna - dławienie...
Obiecałem działający programik. Działa na 100%. Jest to progrtam, który wysyła stan temperatury z DS18B20 do kompa, ale dla Ciebie najistotniejszy jest sposób komunikacji. Jest wysyłane zapytanie i uC zwraca odpowiedź. Jak uporasz się z krzaczkami, to program Ci się przyda. Można zrobić bardzo prosty protokół wymiany informacji. #include <avr/io.h>...
Witam Mam płytkę sterującą dwoma kanałami PWM - przez ULN oraz MOSFETY. Płytka ma dwa wejścia oraz wejście czujnika PIR - INT1. Ma przede wszystkim sterować włączaniem taśmy LED 12V z czujnika PIR ( oprócz tego z drugiego wejścia ). LED włączona przez PIR ma docelowo świecić określoną ilość czasu ( zależną od natężenia światła ) i się wyłączyć. Żeby...
Dla 8Mhz przy preskalerze 256 potrzebujesz 31250. Możesz wykorzystać np tryb CTC. Rejestr licznika zerujesz. COMPA ustawiasz na 31250. Preskaler wybierasz na 256 (timer startuje natychmiast). Włączasz przerwanie COMPA. Oczywiście mowa tu o liczniku 16-bitowym. Podane ustawienia odliczają jedną sekundę. Dla trzech sekund preskaler 256 nie wystarczy...
Witam! Z tego co zauważyłem, a to: '-------------------------obsługa przerwań--------------------------------... '''''''''''''''''''''''sekunda - przerwanie od zegara'''''''''''''''''''''''''' Calasekunda: Cala_sekunda = 1 Stop Timer0 Impp = Tcnt0 Tcnt0 = 0 Start Timer0 Liczba_taktow = Capture1 Capture1 = 0 Return wg. mnie powinno być: '-------------------------obsługa...
Witam, W/g pdf-a ATMegi128 timer3 może pracować w trybie auto przeładowania. W helpie do Bascoma 1.11.9.8 niestety nie mogę znaleźć opisu w jaki sposób skonfigurować licznik aby sam się przeładowywał. Obecnie robię to w przerwaniu. Czy może ktoś mi podpowiedzieć jak to zrobić? [syntax=basic4gl][/syntax] $regfile = "m128def.dat" $crystal = 8000000 $hwstack...
regfile = "2313def.DAT" $crystal = 11059200 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portb.6 , Rs = Portb.7 'Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.1 , Db6 = Portb.0 , Db7 = Portd.6 , E = Portb.3 , Rs = Portb.4 Cursor Off Config Pind.6 = 1 Config Pind.0 = 0 Portd.0...
Witam, od wczoraj zmagam się z problemem odbioru kodu RC5 w urządzeniu, w którym mam multipleks dużej ilości wyświetlaczy 7-segmentowych LED. Przerwania na multipleks przychodzą co około 4ms. Multipleksowanych cyfr jest łącznie 48, ale pogrupowane są one, tak jakby były tylko 4 cyfry. W każdym przerwaniu kody segmentów wysyłane są szeregowo na 3 rejestry...
Wyłącz przerwanie ADC - bit ADIE nie powinien być ustawiony. W przerwaniu timera, kiedy zmieniasz licznik cyfr na 0, odczytaj ADC do zmiennej pomocniczej, a potem tę zmienną rozbij na cyfry. Nie rób tego w pętli głównej bez potrzeby w kółko. W pętli głównej tylko uśpij procesor. ((ADC % 1000) % 100) % 10 to dokładnie to samo co ADC % 10. Nie używaj...
Oto skomentowany kod: [syntax=c]int main(void) { //DDRD |= ((1<<PD0) | (1<<PD1)); sei(); TIMSK |= (1<<TOIE0); //Przerwanie overflow dla timer0 TCCR0 |= (1<<CS01); //Preskaler 8 TCNT0 = 131; //Początkowe wypełnienie timera while(1) { lcd_init(); } return 0; } ISR(TIMER0_OVF_vect) { TCNT0 = 131; //Początkowe wypełnienie timera...
Poniżej przesyłam kod [syntax=c] #include Nextion.h #include EEPROM.h #define wejscie 2 #define wyjscie 13 int sensorPin = A1; bool state; int i; int odczyt; int zczytane_cyfry[4]; int liczba; char buffer[10] = {0}; int b,c; int mniej; int wiecej; int ilp; int raz; int znaczek; zmienna mowiaca w jakim trybie pracy dziala wyswietlacz int zz; int sensorValue;...
Tak oczywiscie reset podciagniety. Okrojony do minimum program: $crystal = 7372800 $regfile = "m168def.dat" Config Aci = Off Config Lcd = 40 * 2 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.0 , Db7 = Portb.1 , E = Portb.4 , Rs = Portb.5 Config Timer1 = Timer , Prescale = 64 On Timer1 Timer1_int Config Pinc.4 = Input '...
W inicjacji adc jest sporo byków.Niepotrzebne przerwania , licznik (z których nie korzystasz ), brak vref(chyba ze wiesz jaka wartość jest domyślna).Do tego programiku powinno wystarczyć. void adc_init(void) { ADCSRA = (1 << ADEN); ADCSRA |= (1 << ADPS0) | (1 << ADPS1) | (1 << ADPS2);...
Witam! Mam pewien dziwny problem. Pracując nad pewnym urządzeniem oparłem wszystko na początku na mikrokotrolerze Atmega16. W miedzyczasie okazało się, że potrzebne mi 2 liczniki 16bitowe, więc przesiadłem się na mege162. Zmieniłem odpowiednie linijki programu i teoretycznie wszystko powinno hulać, ale kompilacja staje przy odczycie wartości z kanału...
Zrób tak żeby w przerwaniu zatrzymywało tylko licznik i startowało go na nowo i zapisywało to do jakiejś zmiennej. Potem w pętli głównej robisz obliczanie obrotów na bierząco = cały czas. do tego można użyć jeszcze tajmer0 aby co jakiś czas odświerzyć wynik na jakimś wyswietlaczu. W ten sposób procek cały czas będzie coś robił. A swoją drogą to chyba...
Witam serdecznie. Napisałem prosty program do pomiaru częstotliwości. Chcę wykorzystać TIMER3 do pomiaru częstotliwości. Na wejście podaję sygnał prostokątny z generatora. Nie jestem pewien czy na wejście T3, czy na ICP3 powinienem podawać badany sygnał, ale program nie działa w obu przypadkach. Poniżej prezentuję kod programu i proszę o pomoc, co robię...
Niedokładnie przeczytałeś. W zakładce nawigator: Config Timer- uwaga! po ustawieniu prascale licznik natychmiast zaczyna zliczanie. Można użyć start Timerx i stop Timerx Np. Config timerx, prescale 'timer zaczyna liczyć stop Timerx 'timer stoi- ale już coś zliczył Timerx=y 'timer ma wartość początkową =y - np.0 Start timerx ' Timerx zaczyna liczyć od...
Dzięki Przejrzałem sporą część Twoich opracowań. Jest tego tyle, że starczyło by na niezłą "cegłę". Naprawdę są pomocne, szczególnie podoba mi się sposób przedstawiania uwag - czytając nie sposób ich zignorować. Aby uruchomić mój USBasp (działający z WINAVR), pozwoliłem sobie skorzystać z artykułu "Jak ożenić USBasp i Atmel Stydio. Wykonałem wszystko...
Tak z ciekawości, jaka częstotliwośc zegara udało ci sie uzyskać na PIC'u i jaką metodą? Domyślam się iż chodzi o zegar matrycy (bo zegar procesora łatwo obliczyć znając f kwarcu). Zegar matrycy przy kwarcu 33.86MHz wynosi 10.456kHz. A metoda wygląda tak: list p=16f628a, r=hex #include p16f628a.inc ;__config b'11111100010000' __config b'11111100000010'...
atmega start start licznik licznik atmega
bramy hormann programowanie połączenie modemu linia telefoniczny miernik cęgowy brymen
botowanie lenovo botowanie lenovo
Funkcja transformatora EEL w spawarce Brak świateł drogowych w Fordzie Mondeo MK4 - diagnostyka