Obsluga jednego DS1820 (SKIP_ROM) + wyswietlenie temp na LCD (HD44780) + przerwanie od timera zajelo okolo 500B pamieci programu + 28B RAMu na kompilatorze hitecha PICC dla procka PIC16F628A. Pewnie i tak za duzo :)
Różnice: - szybkość, - objętość kodu, - poprawność operacji w przypadku, gdy modyfikacji poszczególnych bitów portu dokonujesz np. w przerwaniu i poza nim.
Witam, stworzyłem na płytce stykowej układ, gdzie podłączyłem przyciski, LCD hd47780, rtc ds1307 i buzzer. Korzystam z bibliotek do wyświetlacza od "radzia", TWI od p. Mirka oraz ze znalezionej na tym forum biblioteki do RTC. Napisałem szybki program, który wyświetla godzinę w formie hh:mm:ss na ostatnich polach pierwszej linii. Dodatkowo dodałem przerwanie,...
Może chodzi o interruptus, zauważyłem że tlc5940.c z https://sites.google.com/site/artcfox/de... używa przerwań ISR(TIMER0_COMPA_vect) może to zakłóca procedury LCD, może wystarczy przed procedurą wyświetlającą dać cli(); a po sei(); tak mi się wydaje, bo miałem podobny problem z przerwaniami.
Takie rozwiązanie przyspiesza obsługę wyświetlacza i w niczym nie przeszkadza, m.in. eliminuje oczekiwanie przy obsłudze wyświetlacza (obsługa działa na przerwaniu timera). Używam w paru projektach - sprawdzone.
Dziękuję kolegom za cenne uwagi. Co do wersji z os.mbed.com, to próbowałem ją do siebie przeportować ale niestety efekt był podobny. Poprawiłem kod według wskazówek kolegi Freddie Chopin, przerwanie SysTick jest generowane co 10 us oraz wydłużyłem czasy dla półbajtów, ale efekt jest dalej taki sam. Pojawiło się też słówko volatile. Kod wygląda teraz...
dzięki wielkie za pomoc :) w ciężkich bólach ale doszedłem co było, jedna ze ścieżek na sterowniku HD44780 od LCD była przerwana nie wiem jakim cudem ale była :) oki to już działa teraz tylko mam wielką prośbę do autora projektu o podanie kodu źródłowego programu tylko i wyłącznie do własnego użytku.
to są timery. może multitasking za pomocą millis() zda egzamin? Musisz podpiąc się pod przerwania. Sztuczki z millis daruj sobie. Może jakoś to zadziała ale beda sytuacje, w których wyświetlacz będzie niektóre cyfry wyświetlał jaśniej lub ciemniej czy "chwile zwątpienia" jak podczas otwierania menu w Windows gdzy przychodzi e-mail. Nie będe książki...
Witam ! Programuje właśnie uC Atmega8. Mam pewien problem z ustawieniem klawiatury. Otóż, podłączam ją poprzez ps/2 do atmegi, literki są poprawnie wyświetlane na wyświetlaczu LCD jednak jest taki problem ze podwójnie( AABB..) jeżeli wcisnę dość szybko jedna literkę po drugiej to mam : ABAB ... . Podejrzewałem, że to flaga 'nowy' jest za późno się zeruje,...
Witaj, Jak się domyślam problem z komunikacją 1Wire. Sprawdź czy w stosunku do częstotliwości z jaką taktowany jest Twój procesor dobrze są dobrane parametry czasowe transmisji. W 1Wire jest zdefiniowanych kilka okienek czasowych - czy są dobrze odliczane? Gdy uruchamiasz transmisję wyłącz przerwania. Pzdr. asd
Witam. Realizuje właśnie projekt układu który steruje panelem słonecznym i mam pewien problem, mianowicie wyświetlacz nie reaguje na mikrokontroler (cały czas wyświetla tylko czarne prostokąty w pierwszej linii). Korzystam z gotowych bibliotek hd44780.h: http://obrazki.elektroda.pl/9528292600_1... Próbowałem bibliotek z kilku różnych...
Przerwanie z timera może Ci zdekrementować zmienną przed jego wyzerowaniem. Skoro i tak czekasz w while'u to nie lepiej użyć trybu single shot? (edit: albo one shot. Nie pamiętam, chodzi generalnie odliczanie z zatrzymaniem przy końcu+zapalenie flagi)
Rozumiem, że TimingDelay_Decrement() wywołujesz w przerwaniu od SysTick?
Z tego co wyczaiłem to mega popędzana jest kwarcem 14,7456 MHz (kwarc do USART)... Timery ustawione są tak, że przerwanie wywoływane jest co 0,05s stąd podstawowa zmienna zliczająca do sekundy zwiększana jest co drugie wywołanie przerwania (odpowiadają za to variable i variable1)... Spróbuj przeanalizować ten kod i skonfrontować go z dokumentacją do...
Witam. Napisałem program, który steruje temperaturą pewnego procesu za pomocą PWM, wszystko działa ok ale mam taki mały dylemat: Jeśli chciałbym dorobić menu do zmiany parametrów to po wejściu do tego menu (pętla) program przestałby zajmować się obliczaniem wypełnienia PWM, które powinno być kontrolowane bez przerwy. Zastanawiam się czy nie umieścić...
Jeśli chcesz uzyskać minimalny narzut czasu procesora na obsługę wyświetlacza - w ogóle nie czytaj znacznika BUSY, bo jego wyzerowanie nie oznacza gotowości. Obsługuj wyświetlacz w przerwaniu timera. Jakiś czas temu obsługa HD44780 na STM32 w przerwaniu timera była pokazana w EP. A pierwszy błąd w Twoim kodzie jest tu: LCD_EN_bb=0; LCD_EN_bb=1; - wymagany...
Częstotliwość przerwań ma być taka, żeby użytkownik nie widział sekwencji pisania kolejnych liter. Jeśli przyjmiemy, że użytkownik nie zauważy, jeśli cały wyświetlacz zostanie przepisany w ciągu 30 ms, to dla wyświetlacza 2x16 oznacza to konieczność przesłania 34 bajtów w ciągu 33 ms, czyli częstotliwość przerwań powinna być nie mniejsza niż 1 kHz....
Wcześniej programowałeś w BASCOM? Nigdy, przenigdy w C nie używaj Goto . Od tego są funkcje, instrukcje warunkowe, pętle oraz break i continue: http://mikrokontrolery.blogspot.com/2011... Jak często wykonuje się przerwanie TIMER2_COMP_vect?
Odkopuję temat, ponieważ mój problem również tyczy się przerwania od przycisku, przy użyciu tych nieszczęsnych bibliotek :) Wydaje mi się, że wszystko jest włączone i zainicjowane jak należy... Dokładnie przeszedłem przez UM, oraz posiłkowałem się tematami na 'stackoverflow'. Przerwanie następuje, ale trwałe, tzn wszystko się zatrzymuje migająca dioda...
A gdzie masz obsługę przerwania CTC od Timer2 ?
Nie przesadzam. Po prostu nie rozumiecie moich intencji. Nie jest znana mi osoba, która podczas inicjalizacji LCD na HD44780 do generowania opóźnienia stosuje przerwania (od timera). Napiszecie, że AVR ma _delay_ms i _delay_us. No ma, ale ARMy już nie. Całą Twoją wycieczkę w moją stronę gaskoin puszczę mimo uszu.
Czy którąś z tych akcji wykonujesz w przerwaniu? Pokaż kod. Te delay() wyglądają mało sensownie.
Zmiane bitow ustawiasz w inicjacji wyswietlacza. Masz to tam chyba na piechotę napisane więc nie będę tego rozpisywać. Sprawdź tą funkcje. Ewentualnie jak nie wiesz jak to ma być to ściągnij działającą biblioteke. Spróbuj użyć biblioteki autorstwa Radosława Kwietnia. Jest tu na forum jak poszukasz. jest bardzo łatwa w dostosowaniu. Takie pytanie może...
Po poprawce idzie OK. Procesora brak podłączenia nie blokuje procesora. Dognę całość do swoich potrzeb i opublikuję całość w tym temacie. Dodano po 46 Jeszcze jedno pytanie. Jak w tym przypadku zrobić podgląd działania kolejnych procedur jeżeli nie są uruchomione przerwania. W jednym z przerwań są peryferia po i2c które muszą być już zainicjowane zanim...
Nadchodzi moment odświeżenia LCD (nie istotne skąd) i teraz funkcja po prostu porównuje dane w buforach - jeśli takie same to nic nie robi, jeśli inne, to zmiana ma LCD i przy okazji kopia w buforze wewnętrznym. I wyifować każdy znak? A po wyifowaniu, dokąd idą dane które mają być wysłane na wyświetlacz? Albo jest for i delaye, albo przerwanie...tak...
1. Co generuje zliczane impulsy? 2. Nie linkuj plików .c biblioteki: [syntax=c]#include "hd44780.c"[/syntax] 3. Funkcje przerwań powinny działać możliwie szybko, a u Ciebie mamy sporo czekania: http://mikrokontrolery.blogspot.com/2011... Przenieś wyświetlanie do pętli głównej, tym bardziej, że masz ją pustą - czyli tak jak...
Ten temat mnie zaskakuje, najpierw okazuje się, że ATmega Arduino i przetwornik 2R2 osiąga więcej sampli na sekundę niż STM z wbudowanym DAC 1MSPS, a później pojawia się kolejny projekt na STM+TFT. (at)piotrva czym się różni gitlab od github? Co do obsługi LCD na HD44780, zatrzymanie programu piszącego do LCD (przez przerwanie) nie powinno zakłócić...
Troszkę za dużym ogólnikiem rzuciłem... Tak, stos to HW Stack (sprzętowy) i Soft Stack (programowy). Należało by zwiększyć rozmiar stosu sprzętowego, bo używasz przerwania od Trmer1. Wywołanie obsługi przerwania powoduje zajęcie 32 bajtów stosu (czyli tyle, ile masz zadeklarowane), a nie tylko do tego jest on używany. Możesz ustawić np. dwukrotnie więcej....
Witam, próbuję od długiego czasu napisać odpowiedni program do tego czujnika, przeczytałem większość wątków w internecie na ten temat, zebrałem informację ale niestety nie działa... Nie rozumiem też jednej rzeczy w przerwaniu. Atmega taktowana 8MHz. Oto kod: [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h>...
Mój ma takie oznaczenie i nie działa. Dalej szukam. Jak znajdę błąd to dam znać. Dalej nie mam rozwiązania. Wymieniłem wyświetlacz na inny, który już kiedyś używałem i działał. Może podejść do sprawy inaczej. Jeśli ktoś byłby tak miły i spojrzał w program to może wypatrzył by błąd. Podłączenie wyświetlacza: pin 1 - masa pin 2 - +5V pin 3 - kontrast...
Bardzo dziękuję wam za pomoc. Zaraz to wszystko przeanalizuje i napisze czy mi coś z tego wyszło. Wiem jeszcze że to wszystko będzie musiało być zawarte w przerwaniu ponieważ te dane z każdego kanału będą wyświetlane na HD44780, którego obsługę już udało mi się opanować.
Po pierwsze jakie czasy chcesz obliczać i jakie przerwania po co ??? To jest bascom nie assembler, deklarujesz na wstępie programu prędkość kwarcu a kompilator troszczy się o resztę tj. dajesz deklarację $regfile = "m8def.dat" $crystal = 12000000 Po drugie, procedura obsługi wyświetlaczy LCD (mowa tu o alfanumerycznych HD44780) jest w BASCOM zaimplementowana...
dondu, po tym returnie jest nieskończona pętla ;) tyle, że przerwania nie działają Ooo, nie wiedziałem - sprawdzę :-)
Moim zdanie to nie transoptor tylko procek się nie wyrabia, a dokładnie program. Funkcja lcd Ciebie pogrąża. Jeżeli dobrze liczę to przy 320 zębach na sekundę sygnał od transoptora powinien pojawiać się co 3 ms, a zdaje mi się, że obsługa funkcji lcd działa dłużej. Pokaż co masz w hd44780.c. PS. Nie lepiej zrobić to na przerwaniu?
nie bardzo wiem czy takie coś by zadziałało. Czasu między przerwaniami nie dam rady policzyć bo jedno przerwanie generowane jest co 1s ,a drugie przerwanie do zliczania czasu wtrysku można powiedzieć ,że jest losowe, no i jeszcze przerwanie z timera1 do zliczania impulsów przejechanej drogi. Chyba bym się w tym zgubił. Dzisiaj zamówiłem sobie na Allegro...
EDIT: Odczyt przydaje się chociażby do sprawdzenia BUSY. Obsługa przez sterowanie czasowe jest nieefektywna. Żeby czekać w pętli aż się zmieni stan flagi? To jest dopiero nieefektywne. Lepiej używać timera do tego i w procedurze przerwania wysyłać dane do wyświetlacza.
Witam, Czego tu brakuje bądź co jest źle? Program się wykonuję (naprzemienne mruganie diod portu A) ale przerwanie nie działa(jest wywoływane podaniem masy na pin PD2). #include<avr/io.h> #include<util/delay.h> //#include"HD44780.h" #include<avr/interrupt.h> int main() { DDRA=255; DDRD &= ~(1<<PD2); GICR |= (1<INT0); PORTD...
nie odpalisz , te interfejsy db25-usb to wielkie oszustwo , one nadają się tylko do współpracy z drukarką . Do działania wszelkich interfejsów , programatorów czy tez LCD musisz mieć fizyczny port równoległy z własnym przerwaniem czego żaden pseudoemulator nie obsługuje . Jednak można spotkać projekty interfejsów uSB-LCD na hd44780 oparte na mikrokontrolerach...
Odliczając reset zostaje 17 lini;) I2C(TWI) 2 linie wiec I/O do wykorzystania jest 15 liczmy że chcemy adresy powyciągać na zewnątrz (nie wiem po co ale można) 12:) obsługa 4 bit + 2bit sterowanie czyli zostają 4 I/O Od kiedy to 12-6 daje 4? Tak poza tym po co wyprowadzać adres? Można go przecież trzymać w eep i programowo zmieniać. Ja bym to widział...
Witam, podłączyłem do portu INT1 przycisk i chciał bym żeby zbocze narastające wywoływało przerwanie, w którym zwiększam licznik o 1. Ustawiłem na MCUCR jedynki dla ISC11 oraz ISC10 co odpowiada wykrywaniu zbocza narastającego, włączyłem przerwanie na INT1 oraz odblokowałem globalnie przerwania, ale niestety licznik inkrementuje się w kółko gdy na port...
Można, tylko po co cokolwiek odczytywać? Znacznik BUSY nie daje przecież informacji o gotowości sterownika, a odwracanie kierunku portów do odczytu gotowości niepotrzebnie zajmuje czas. Najprzyjemnije się gada z HD44780 przez DMA wyzwalane timerem, z przygotowaniem danych dla DMA w przerwaniu timera. :) żadnego oczekiwania, LCD odświeża się prawie sam.
Chodzi o to, że przerwanie powinno tylko być małym produktorem (lub konsumentem) informacji, i popychać/czytac te informacje z/do jakiegoś bufora (kołowego lub nie), a interpretacja/składanie danych z bufora powinna byc w petli głównej . Doszczętne przetwarzanie danych w samym przerwaniu to śmierć kliniczna procesora. Mam rozne kody do obsługi różnych...
Pozwalam sobie zamieścić 'żyjący' przykład korzystający z przerwań: Zakładam że zegar w mojej atmedze ma 16MHz :) Program na przerwaniach timera0 robi 'pracę' programu, konkretnie konwersję A/D z portu A0, i robi to około 60 razy na sekundę Na przerwaniach timer1 odświeżany jest ekran LCD (przerwanie wywoływane 30 razy na sekundę) Na porcie A znajduje...
Witam, piszę całkiem spory (w moim mniemaniu) program do sterowania silnikiem i paroma jeszcze innymi rzeczami (aktualnie na ATmega32L i 8MHz wewnętrznego oscylatora) i mam niezrozumiały dla mnie problem z obsługą przerwania od timera, kod obsługi przerwania wygląda mniej więcej tak: ... .org 0x0012 rjmp t1Ovf ... t1Ovf: push r16 push r17 in R16,...
W twoim programie wg BASCOM-AVR są błędy: Error : 254 Line : 17 Variable expected Przepraszam za pomyłkę. W BASCOM-AVR, do przerwań od timera, powinniśmy użyć 'TIMER1_OVF' zamiast 'TIMER1 OVERFLOW'. Podobna sytuacja jest z przerwaniem od INT0, powinniśmy użyć 'INT0_ISR'. Najpierw musimy skonfigurować Timer1 i INT0, następnie włączyć przerwania. Kiedy...
Niestety mimo zmiany środowiska na Eclipse i wieeelu testów z czasami wykonania poszczególnych procedur w dalszym ciągu kod nie działa. Czy jest ktoś na forum kto jest w stanie odpowiedzieć dlaczego kod w C++ nie działa a analogiczny w ASM hula aż miło? Dodam że ze znaczących zmian to wyłączyłem przerwania. W nagrodę za pomoc oddam 200 punktów.
Skoro masz problem z zrobieniem opóźnień to, podłącz wyświetlacz przez expander PCF8574 prędkość TWI ustaw na 100000Hz i po sprawie. Możesz działać na pełnej prędkości procesora. Posiadam kilka kości PCF8574. Odciąży to uC od przerwań i zaoszczędzę kilka pinów. Albo lepiej użyć czegoś nowszego, w rodzaju EADOGM204B-A. Zgodny z HD44780, może pracować...
(at)matti0010 przy 48MHz ie możesz ustawić przerwań systicka na 0.5s bo musiałbyś zrobić coś takiego: [syntax=c] SysTick_Config(48000000 / 2); [/syntax] Niestety maksymalna wartość reload dla systicka to 0xffffff
Chcialem uzyskac przerwanie co 1 sekunde aby zwiekszyc tylko zmienna sekundy do odmierzania czasu. Ale mikrokontroler jak sie okazalo resetuje mi sie co sekunde gdy tylko nastapi przerwanie. blad w programie? pomóżcie prosze. z gory dziekuje! #include "hd44780.h" #include <interrupt.h> // funkcje sei(), cli() #include <avr/io.h> // dostęp...
Musisz zaimplementować to dokładnie tak jak pokazano w nocie kontrolera. Ważne tu będą zależności czasowe. Zrobić to łatwo - masz stroby odczytu, zapisu i CS - najlepiej je podłączyć pod piny generujące przerwanie, resztę robisz w procedurze jego obsługi. Niemniej jednak, jeśli nie znasz się na programowaniu to ten projekt może być za ambitny. Zacznij...
Coś w tym stylu: zmienna i - integer zmienna lampy - tablica bool ze stanem lamp for i od 1 do 8: if lampy[i] == true: wyświetl "lampa nr i włączona" czekaj 2s Jeśli masz oczekiwanie zrobione na przerwaniach, to trzeba by coś takiego: przerwanie co 2s: do: i = i+1 while (lampy[i] != true) and (i<=8)...
Witam Chce stworzyć prosty analizator widma oparty na ATmedze oraz wyświetlaczu LCD HD44780. Płytkę z filtrami stworzyłem wcześniej i przebadałem oscyloskopem i wszystko działa jak należy. Problemy zaczęły się dopiero przy programowaniu procesora. Poradziłem sobie z obsługą wyświetlacza i, z pomocą forumowiczów, z obsługą ADC. Mam teraz problem z przerwaniem....
W tej chwili mam takie coś: [syntax=c] #include <avr/io.h> #include <stdlib.h> #include <util/delay.h> #include <math.h> #include <stdio.h> #include "HD44780.h" //definicja ADCIN (wejście ADC) #define ADCIN PF0 int main(void) { float pomiar; char str[8]; DDRF = (1<<ADCIN); //Ustawienie Wejścia ADC LCD_Initalize();...
Witam. Mam 2 problemy: 1) Nie udało mi się włączyć rezystorów podciągających na porcie B. Są one podpięte do wyjścia zegara typu OC i chcąc zminimalizować ilość elementów na płytce wpadłem na pomysł włączenia tych wewnętrznych. 2) Nie wiem dlaczego gdy na RB0 wystąpi zbocze opadające (czyli wtedy kiedy powinno nastąpić przerwanie) uC restartuje się....
Witam. Szczęśliwie dla użytkowników praktycznie wszystkie wyświetlacze alfanumeryczne LCD obsługuje się tak samo. Ich chipy sterujące są zgodne z HD44780. W skrócie obsługa LCD'ka wygląda tak: - inicjalizacja (zestaw komend sterujących, ustawia się min. sposób podłączenia 4/8 bit, ilość linii itp itd.). Sprawa dosyć dobrze opisana w większości datasheet'ów...
a gdzie masz zadeklarowane PORT'y do LCD? LCD_DB4,5,6,7 i DDR'y, domyślam sie że w HD44780.h, ale wole zapytać :) Sprawdź czy napewno dobrze mas podefiniowane porty. Jezeli jest to zegar, do domyślam sie że przerwanie jest co 1s, także w ISR powinno sie zmieścić, ale takich rzeczy lepiej nei robić. dodaj sobie jakąś nową zmienną, np bitową, a w ISR...
Przetestowałem ten kod kolegi i poprawiłem. Głównie to brakowało jak zauważył już kolega jarekgol zezwolenia na globalne przerwanie sei(); . Ale to pewnie z pośpiechu. No i przerwanie od CMP nie resetuje licznika. Dlatego zmieniłem na przerwanie od przepełnienia OVF. No i wykorzystałem inną bibliotekę dla LCD, ale to nieistotny szczegół. Ten kod dział...
Może lepszym rozwiązaniem na początek będzie pobieranie tych danych bez walidacji certyfikatu strony czy też fingerprint. Główna zmiana to zastąpienie poniższej linii kodu: Druga rzecz to chciałbym żeby podświetlenie wyświetlacza włączało się po "machnięciu" ręką i to działa tylko problem w tym że są tu delay-e i inne fukcje które opóźniają. Rozumiem,...
Rozumiem, że pytasz o to, czy w numerze EP 2014/4, w którym znajduje się artykuł 2014/4 "32 bity jak najprościej. STM32F0 - nieblokująca obsługa wyświetlacza LCD ze sterownikiem rodziny HD44780. cz. 4", znajduje się artykuł o nieblokującej obsłudze wyświetlacza LCD z HD44780. Obawiam się, że odpowiedź twierdząca nie rozwieje Twoich wątpliwości, bo wpadasz...
Usunąłem całą obsługę wyświetlacza, tzn. całą bibliotekę, bo fizycznie układ taki jak był, dioda dalej nie reaguje na przerwanie. Biblioteka obsługująca LCD jest w całości ze strony Dodano po 1 Położyłem uC na płytce stykowej (już zaprogramowany), na PD5 podpiąłem diodę z zewnętrznym zasilaniem, na PD2 przycisk do masy. Pod PD2 i reset podpiąłem kondensatorki...
Problemem jest tutaj fakt ze licznik zlicza impulsy. A ty każdemu krokowi enkodera chcesz przypisać pewna wartość (regulacja zgrubna/precyzyjna) a tego licznik nie robi (bo każdy impuls jest traktowany z taka sama waga). Jednym z możliwych rozwiązań jest zliczanie ilości impulsów i mnożenie ich przez wagę (w zależności od wybranej dokładności). [syntax=c]...
:) Pisząc obciążenie miałem na myśli obciążenie wydajnościowe. Na przerwaniach liczników mam już kilka procesów podpiętych no ale to nie Windows żeby się ot tak zwiesił. Pisze w assemblerze i nie korzystam z gotowców także będzie działać.
Sprawdź miernikiem czy masz przejście od pinu procesora do pinu LCD. Jesteś na 100% pewien że procesor właściwie programuje się? Zastosuj się do porad na tej stronie http://mikrokontrolery.blogspot.com/2011... Czy programowałeś FuseBity procesora? Sprawdzałem miernikiem i jest przejście, żadnych zwarć, przerwań. FuseBitów...
Zrobiłem kod z przerwaniem i również nie działa tak jak powinien [syntax=c]#include <avr/io.h> #include <util/delay.h> #include<stdio.h> #include<hd44780.c> #include<avr/interrupt.h> #define TRIG PC1 #define ECHO PD2 volatile int echo_flag =0; volatile int time =0; char ekran[6]; int main(){ DDRD = 0x00; // ustawienie portu...
Witam Na początek napisze ze jestem początkujący w C. "Napisałem" program który czyta czas i datę z PCF8583 i pokazuje to na LCD.I wszystko byłoby ok gdyby nie to ze dla testu na przerwaniu procesor ma generować krotki sygnał dźwiękowy co 1 sek. i "prawie" jest ok TYLKO raz na jakiś czas nie chce piknąć na mijającą sekundę, tak jakby gubił te sekundę....
Jeśli źle umieściłem temat to bardzo proszę o przeniesienie. Kod który wklejam : http://obrazki.elektroda.pl/7428430100_1...
Chyba nie czytasz tego co piszę. Przeczytaj co wypisałem o inicjalizacji i porównaj z tym co ty powypisywałeś. Dlaczego ustawiasz EN w stan wysoki, ustawiasz dane na liniach D0 - D7 a potem zerujesz EN? Ja tak na pewno nie napisałem. Impuls EN ma być po ustawieniu danych na liniach D0 - D7 i to z odpowiednim opóźnieniem. Pisałem o tym. Wróć do tego...
I2C Mam juz zrobiona do EPROM wiec nie mam z tym wiekszego problemu. Sek taki ze jeszcze zegaru nie podpiolem i nie wiem czego po nim oczekiwac :? Zegar ma dodatkowe wyjscie i zaprogramuje je tak zeby co pol godziny pojawial sie impuls alarmowy, wtedy atmeg odczyta przerwanie, zczyta parametry czujnikow, przestawi alarm o pol godziny i pojdzie spac,...
Witam wszystkich Elektrodowiczów! Mam podpięty pod mikrokontroler ARM wyświetlacz LCD 2x40 znaków na sterowniku HD44780. Otóż, gdy tylko się go dotknie (w metalową ramkę, która nie jest podłączona do żadnego sygnału ani zasilania/masy) będąc naelektryzowanym, to wyświetlacz zaczyna mrugać i pokazywać tzw. "krzaki". Software'ową metodą może być ponowna...
też niedawno zacząłem zabawę z uP ale naskrobałem coś takiego, jeśli źle, to mnie poprawcie. $regfile = "attiny2313def.dat" 'attiny2313 $crystal = 1000000 ' 1MHz Config Portb = Output Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.0 , Rs = Portb.2 Config Lcd = 16 * 2 'wyświetlacz 2 linie po...
Dzień dobry. Usiłuję okiełznać przerwanie INT1 w AtMega 644P. Większość przykładów jest dla prostszych atmeg i stąd wynika mój problem. Po uruchomieniu na wyświetlaczu stale widnieje "interrupt" - czyli przerwanie jest stale włączone. Port przerwania INT1 - PA1 jest podłączony do przycisku zwierającego do masy. Program nie wchodzi do pętli głównej,...
Ogólnie przerwania chodzą, ale problem pewnie w tym, że w obsłudze przerwania od timera chce wyświetlić tekst na lcd (hd44780). LCD używam bez wykorzystania linii busy, więc wszystkie komendy idą na delayach zrealizowanych przez timer. [syntax=c] volatile int flag=0; void timer0_inr() { flag++; //set software flag T0IR = 1; //clear interrupt flag VICVectAddr...
Witam, Od samego rana próbuje skłonić mojego AVR do współpracy, chcę mianowicie, aby odebrał znak (slowo) w przerwaniu, a nastepnie wyswietlił go na wyświetlaczu LCD i odesłał odpowiedź. I problem jest nastepujący. Jeśli odbieram dane znak(słowo) bez przerwania (po prostu funkcją USART_Receive), to działa, ale jak dodam instrukcje obsługi przerwań to...
Nie to, żeby linia RW była jakoś specjalnie potrzebna, ale dzięki ustawieniom RS=0, RW=1 można odczytać taki bit jak BF (Busy Flag), zawsze to jest lepsze alternatywa niż opóźnienia delay(). Tu jest problem, który odkładam od pewnego czasu z braku czasu. Przy szybkich kontrolerach obydwie metody są do kitu i powodują marnotrawstwo czasu procesora....
Koledzy proszę, wręcz błagam Was o pomoc...rozwaliłem swojego discovery F0. Tzn. chciałem pobawić się I2C, skapnąłem się, że mam na liniach I2C1 lcd hd44780 więc przestawiłem jego kabelki na portA...niestety również na SWD Pin PA13 i PA14. Nie skapnąłem się, co za destrukcyjne działanie wykonuję. Rozwaliłem chyba bootloader w płytce, nie mogę wcale...
Tak sobie jeszcze pomyślałem, czy aby problemem nie są czasy zapisu-odczytu. Czy wyświetlacz nie wyrabia się... Ale to tak na marginesie. Oscyloskop podłączę. Dodano po 6 A więc sprawa wygląda następująco. Dla jasności funkcja wyświetlania czegoś na ekranie jest tylko w main, a więc wykonuje się tylko raz przy starcie. W pętli jest tylko miganie diodą...
Witam! Otóż pisząc prosty program w C pod mikrokontroler AVR (konkretnie ATmega8) napotkałem na błąd, którego nie mogę zdiagnozować. Jest to fragment programu z wykorzystaniem LCD HD44780 i dwóch switchów, zasada działania prosta, przyciskami zwiększamy lub zmniejszamy zmienną i, której wartość wyświetlamy na LCD. Kod: [syntax=c] #include <avr/io.h>...
Jak dotąd wypociłem tyle ;) [syntax=csharp]#include <avr/io.h> #include <avr/interrupt.h> #include "hd44780.h" volatile int dziesiatka = 0; double sekunda = 0; char tekst; int main (void) { TCCR1B |= (1 << WGM12); // ustawienie timer1 na CTC mode TIMSK |= (1 << OCIE1A); // odblokowanie przerwania CTC sei(); // globalne odblokowanie...
Witam, Napisalem gdzie zaczyna sie problem, uk wywołuje przerwanie samoistnie, zaraz po globalnym zezwoleniu na przerwania sei() sam przechodzi do przerwania i je wykonuje. Chce mieć możliwość przerwania pętli while w jakimkolwiek momencie. Sposób jaki zastosowałem uważam za mało efektywny ale nie wiem jak inaczej się za to zabrać. Pozdrawiam #define...
STM32 i HD44780: http://ep.com.pl/files/10626.pdf Oczywiście takie rozwiązanie jest jak najlepsze, ale póki co tworzę dość prymitywny program w którym nie ma potrzeby robienia wszystkiego w przerwaniach. Stworzyłem tak jak mi poradziłeś projekt w Keil 5.x i owszem udało mi się go wreszcie stworzyć i skompilować, ale ten sam kod zajmuje prawie dwa razy...
to zrób na zewnętrznym przerwaniu, które wykrywa zbocze Do janbernat znowu nie rób idioty kompletnego ze mnie programowanie to niejest moja mocna strona bo dopiero zaczynam i w sumie to ten program to moje pierwsze zetknięcie z programowaniem więc nie jest łatwo to zaproponuje ci podręcznik do C.
Sensowny sposób jest tylko jeden. Buforujesz w pamięci zawartość całego ekranu i wysyłasz nową zawartość bez żadnego wstępnego czyszczenia. Wszystkie zmiany wykonujesz na buforze. Racja! A to dlatego, że wysłanie jakiejkolwiek komendy zajmuje tyle samo czasu co wysłanie znaku. Przesunięcie kursora w dowolne miejsce to wysłanie szeregu komend przesunięcia...
Może jeszcze moja wskazówka co do wyświetlania czegokolwiek na lcd, nie jestem zwolennikiem pisania do wyświetlacza dosłownie wszędzie! Ma to wiele wad, nie jesteś w stanie kontrolować w ten sposób sterownika lcd. Dużo lepsze rozwiązanie to zrobienie definiowalnej tablicy dwuwymiarowej (na potrzeby tworzenia ekranów) i tam wpisywanie treści wyświetlacza,...
Rozwiązanie 1 jest złe. Gdy sygnał A przyjmie poziom aktywny (niski), obsłużysz przerwanie a po chwili sygnał B poziom aktywny w sytuacji gdy A cały czas ma poziom niski, to ne zauważysz sygnału B. Podobnie gdy B aktywny, obsługa przerwania, B i A aktywny. W takich sytuacjach będziesz widział tylko jeden z sygnałów. Co do gubienia przerwania INT 1,...
Czyli zastosowanie gasika nie rozwiąże problemu? A zastosowanie osobnego źródła zasilania dla przekaźnika rozwiązałoby problem? Wiem że to przekombinowane, ale w ostateczności chyba się na to zdecyduje. Gasik ma sens przy innym niż rezystancyjne obciążenie. Np. kiedy podłączasz jakąś indukcyjność. Sam napisałeś, że odłączenie obciążenia rozwiązuje...
Inicjalizacja LCD w tryb 4-bit według producenta HD44780: 1. czekamy > 15ms po włączeniu zasilania 2. wysyłamy 0x38 (jako 1 bajt, nie połówki) 3. czekamy > 4.1ms 4. wysyłamy 0x38 (j/w) 5. czekamy > 100us 6. wysyłamy 0x38 (j/w) i teraz: 7. wysyłamy 0x28 (function set 4-bit) jako dwa 'półbajty'. Ponadto już możemy sprawdzać BF (busy flag). Dopiero teraz...
Witam Znów mam pytanie dotyczące kodu który pozwala na współbieżną obsługe lcd z main i przerwania przedstawiam tylko plik .c [syntax=c] #include "LCD_trans.h" #include <avr/interrupt.h> #include <string.h> #include <util/atomic.h> #include "defines.h" #include "hd44780.h" #include "Alloc_safe.h" #include "PinMacros.h" typedef struct...
Pozwolę sobie jeszcze raz nadużyć Waszej uprzejmości i znowu zwracam się z prośbą o pomoc Sprawa dotyczy sterownika do serwonapędu (na razie jednego, później rozbuduje do 8). Taktowanie 8MHz. Oto kod programu: [syntax=c]#include<avr/io.h> #include<avr/interrupt.h> #include<HD44780.c> #include<util/delay.h> #include<stdlib.h>...
Mam problem aby zmienić taktowanie timera z wew. generatora atmegi na zew. kwarc zegarkowy (timer 1). Po podłączeniu kwarcu do wejść TOSC1 i TOSC2, ustawiłem flagę CS12 i zmieniłem liczbę zliczanych cykli. Po tych zmianach nic się nie dzieje (nie są zliczane sekundy itd.). Co jeszcze trzeba zrobić? Szukałem, ale niby nic więcej nie trzeba było ustawiać...
Jak w temacie. U mnie w programie występuje dziwny błąd. Może najpierw fragment kodu, a właściwie cały mój plik główny: #define F_CPU 8000000UL #include <avr\delay.h> #include <stdlib.h> #include <avr/interrupt.h> #include <avr/signal.h> #include "HD44780.h" main() { sei(); TCCR0 = 1<<CS02 | 1<<CS00; // czyli clk/1204...
Witam, Mam takie pytanko: czy mozna podlaczyc wyswietlacz LCD [HD44780] pod porty PC0...3 w ATMega8, jesli jednoczesnie wlaczony jest przetwornik A/D [ale odczyt jest ustawiony z portu PC4]. Zrobilem tak, i niby dziala, ale strrrrrasznie wolno pojawiaja sie znaki na wyswietlaczu, wszystko jest powolne. Czy to wina samego przetwornika [mam wlaczone przerwanie...
Witam! Początkowo też myślałem, żeby program oprzeć na "switch'u", jednakże nie chciał funkcjonować poprawnie, więc zacząłem szukać innych rozwiązań ( stąd próba realizacji na if'ach ). Obecnie kod wygląda następująco: attachInterrupt() , którym będzie przyciśniecie przycisku, tak ?
zmieniłem kod programu: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "hd44780.h" #include "stdlib.h" char Buffer[20]; int TCNT0_WART=0; volatile unsigned long imp_curr=0; volatile unsigned long imp_prev=0; uint32_t displ=0; int main(void) { //TCCR0 |=(1<<CS00)|(1<<CS01)|(1<...
No można powiedzieć, że niemalże działa :-) Jak zwykle największe problemy wynikały z synchronizacji strumieni danych - wystarczyło coś w nieodpowiednim momencie przełączać, coś za późno się pojawiało i efekt dźwiękowy był nieciekawy. Okazało się np. że pomysł z przekopiowywaniem danych z bufora odbiorczego (z karty SD - 512B ) do bufora nadawczego...
Hej, bawilem sie timerem w CTC i ustawilem preskalar na 64, procek jedzie na 1MHz wew. zegarze. Fusebity ma ustawione na l:E1 h: D9. Mimo ustawien procek rozjezdza sie z zegarkiem 10s na kaze ~30m :/ Czy cos zle ustawilem ? [syntax=c] #ifndef F_CPU #define F_CPU 1000000 // 1 MHz #endif #include <avr/io.h> #include <avr/interrupt.h> #include...
A gdybyś zmiast: #include <HD44780.c> Wpisał: #include "HD44780.h" A HD44780.c dodał do programu w Source Files to byłoby dużo lepiej. Add Existing Source File(s). Dołączanie przez #include plików z rozrzeżeniem .c jest paskudnym pomysłem. Miotanie się od ściany do ściany w pewnym wieku nie przystoi. Cierpliwości. Program się powoli pisze- może...
Tak dokładnie o to mi chodziło. Spróbowałem to zrobić tak: w pętli głównej jest cały czas zapalana lampka (włączane zasilanie). W przerwaniu od zmiany zbocza sprawdzany jest stan logiczny wyjścia komparatora i gdy jest "1" to ustawiana jest flaga oraz wyłączana lampka a gdy jest "0" to flaga jest kasowana a lampka zapali się dzięki pętli głównej. Niestety...
Witam Programuje 2x ADC które szczytuje mi wartości z potencjometrów podłączonych przez dzielnik napięcia do portów PC0 PC1, za pomocą przerwania ADCSRA ( ADIE -Kiedy ten bit jest ustawiony wraz z I-bitem w rejestrze SREG wtedy aktywne jest przerwanie od zakończenia konwersji.) Robię tak za pomocą przerwania a nie timera bo nie chce aby mi ciągle czytał...
Witam wszystkich, Stworzyłem schemat do zapłonu motocyklowego z użyciem dwóch transoptorów, wyświetlaczem LCD na sterowniku HD44780 a także dwóch tranzystorów do sterowania cewką (BU931). Jako kwarcu użyłem 24Mhz. Pierwsza prośba to czy ktoś może mi sprawdzić czy schemat jest prawidłowy. http://obrazki.elektroda.net/64_12688419... Teraz mam...
Witam. Co prawda były już podobne tematy, ale nie znalazłem odpowiedzi na swoje pytania. Napisałem sobie prosty program zegarka w Bascomie który wyświetla stan na lcd (hd44780). Dołączyłem zewnętrzny kwarc 16MHz i ustawiłem fusebity aby z niego korzystał (SUT:10; CKOPT:0; CKSEL:1111). Zegar oczywiście się spóźnia. Początkowo ustawiłem prescale timera0...
hd44780 przykład hd44780 zakłócenia zasilanie hd44780
instrukcja manipulatora satel programatorem rt809f wytrzyma kondensator
doładowanie punktów elektroda silnik siłownika zaworu
Naprawa opadających drzwi zmywarki Amica ZIM436 Schemat instalacji spryskiwacza szyby przedniej - szczegóły i diagnostyka