Witam, ...Na samym początku programu mam miganie 100x50ms - stad wiem, czy program wisi czy nie. ... jestes w stanie to zauwazyc to dla ludzkiego oka swiecenie ciagle no i masz opoznienie rzedu 5s na starcie. Wlasnie od tego masz konfiguracje procesora fusebits, ustawiasz odpowiednie poziomy i opoznienia przy starcie, czemu nie dasz kondensatora raczej...
opoznienie musi byc min 750ms.. bo inaczej otrzymasz zle wartosci
joy_pl: jedyna taka tabele jaka mi sie kojarzy, to moze byc dotyczaca UART, gdzie widniala czestotliwosc rezonatora, predkosc transmisji i blad procentowy. Oprocz zwiekszenia opoznienia ja bym jeszcze dodal drugie opoznienie pomiedzy pomiarami a nie tylko na koncu petli.
Patrzylem na swoj program pilota uniwersalnego w którym stosuje power down i tam oprocz ustawienia wybudzania ma jeszcze ustawione aktywne przerwanie zewnetrzne i oczywiscie napisaną obsluge przerwania. Dodano po 2 moze zamiast zerowac pojedynczy bit w MCUCR wpisz cała wartosc do tego rejestru, gdyz nie widze gdzie ustawiasz ISC11, a jezeli zakladasz...
Nie napisałeś jaki to procesor. Przykładowo dla Atmega8/Atmega32 wystarczy gdzieś napisać UCSRB.TXEN = 0 Dla Mega328P UCSR0B.TXEN0 = 0 Mowa o Atmega16. Instrukcja UCSRB.TXEN = 0 rzeczywiście działa ale tylko do czasu, kiedy nie połączę się z drugą Atmegą. Tak wygląda początek programu dla Atmega16 (odbiornik): Dodano po 2 Znalazłem jeszcze taką informację:...
Jeżeli losowe i bascom to trzeba zrobić pętle od zera do zadanej a w środku wstawić waitms 1. Np tak: dim opoznienie as byte 'moze byc inne dim petla_pomoc as byte .... opozninie=rnd(60) for petla_pomoc=0 to opozninie waitus 1 next petla_pomoc ....
Witam. W programie "AVR delay loop generator" wygenerowalem funkcje opoznienia dla procka ATmega8 przy zalozeniach: kwarc 8MHz, opoznienie 0,002s = 2ms i program wygenerowal mi kod (podaje przeksztalcony juz do funkcji w AVR studio) ; ============================= ; delay loop generator ; 16000 cycles: ; ----------------------------- ; delaying...
jedyne, co to możesz zrobić to "szybkie miganie" diodami portX.X = 1 waitus opoznienie portX.X = 0 X oczywiście zamień na odpowiednie wartości switchami zmieniaj długość opóźnienia if pinX.X = 0 then opuznienie = opoznienie - X end if // zwiększa jasność if pinX.X = 0 then opuznienie = opoznienie + X end if //zmniejsza jasność //ten kod działa, jak...
hej. do dziś myślałem ze typ zmiennej int przechowuje wartości od -32768 do 32767. a tu nagle... napisałem prosty programik na atmega8. nie robi nic tylko powiększa wartość zmiennej typu int o 1. w miedzy czsie dalem male opoznienie i wyswietlenie liczby na lcd, coby dalo sie wszystko zaobserwowac. odpala sie proc. w pętli głównej zmienna sie inkrementuje,...
mozesz tam maksymalnie wprowadzic jednorazowo opoznienie 256 ms. Zeby odmierzyc 1s musisz zrobis oponienie np delayms(100) i umiescic w petli for *10 Tzn. że mam użyć gotowej funkcji bibliotecznej WinAVR - "void _delay_ms (double __ms)" z bibliotegki "delay.h" i wsadzić ją w takiego fora: #include <util/delay.h> ...... void delays ( )...
Pomoze ktos w skompilowaniu tego programu ?? przepisalem ten program z Nowego Elektronik i chcialbym zaprogramowac nim procesor atmega8 ale nie wiem jak to zrobic. [syntax=basic4gl] 'Nowy Elektronik 701-k 'Licznik Impulsów ver. 1.0 'BASCOM-AVR IDE Verion : 1.11.8.1 'Compiler: Version 1.11.8.1 $regfile ="m8def.dat" $crystal = 12000000 Dim Impulsy As...
No to napisz sobie program na pomiar z dwoch zrodel i sam sie przekonaj, Oczywiscie jak dasz długi czas konwersji to bład bedzie minimalny, ale np u mnie przy min czasie konwersji mierzone napiecie 2.6v pokazywalo 1.4 po dodaniu opoznienia ok 30uS zaczelo wskazywac 2.6V. No cóż tez jestem tym zaskoczony bo kazde opoznienie dla mnie to wzrost poboru...
Witam, mam problem z poniższym programem,który jest częścią większego kodu. Chce aby wejść w aplikacje, konieczne bylobyby wcisniecie odpowiednio w sekwencji :3 razy przycisk 1, 2 razy przycisk 2. Po wpisaniu tej sekwencji program ma przejść do dalszych instrukcji w mainie. Jesli kolejnosc sekwencji zostanie pomylona program wraca do poczatku wpisywania....
Witam serdecznie. Zrobilem prosty wlacznik pompy na atmega8 temperatura mierzona na 1-wire, wyswietlacz LCD do wskazywania temperatury W sumie bardzo prosty ukladzik jak temperatura wieksza od TON to zalancza pompke a jak mniejsza od TOFF to wylancza. Elementem wykonawczym sa dwa przekazniki sterowane przez BUZ11. Zasilanie ukladu jest zrobione ze starej...
Witam Mam za zadanie wykonać sterowanie fazowe żarówki. Wykorzystuje układ Atmega8 oraz Bascom 1.1.9.5. Poniżej przedstawiam kod: Enable Interrupts Enable Int0 Enable Timer1 Config Int0 = Falling Config Timer1 = Timer , Prescale = 1 On Int0 Przerwanie On Timer1 Opoznienie Load Timer1 6000 Do Loop : End Przerwanie: Start Timer1 Return Opoznienie:...
Witam, Zapisz_buffor to funkcja z ksiazki tmf. Zapisuje ona cyklicznie do buffora skladajcego sie z 1000 komorek eepromu kolejne wartosci licznika. Program mam napisany w nastepujacym stylu: [syntax=c]if((trzymam_PD0)) { zapisz_bufor(licznik++); zmieniam_PB0(); //na stan przeciwny w stosunku do PD0 //PD0 jest filtrowane przez 100nF i 4,7kOhm, nie ma...
przepraszam //Najpierw musisz ustawić odpowiednie parametry //np tak Kod: //unsigned char odebrane; //zmienna globalna - definujemy ja przed wszyskimi funkcjami unsigned - oznacza ze przyjmuje warotsc od 0 do 255 unsigned char zmienna; #include <avr\sfr_defs.h> //pozwala sterowac bitami code::blocks #include <avr\io.h> //wejscia_wyjscia...
Tak jak pisałem jest źle napisana logika w Twoim programie, nie może być ELSE IF if a potem ELSE. Poprostu nie wykonuja się kroki silnika. Dodatkowo jeśli kroków będzie więcej jak 100 to będzie przekroczenie czasu 300ms pomiaru timerem1. Dlatego pisałem że jeden pomiar, jedno wykonanie kroków silnikiem i dopiero ponowne wykonanie pomiaru. Powinno być...
Witam serdecznie, mam problem który polega na dostosowaniu programu działającego na AT90S8535P do Atmega8. Dokładniej problem polega na tym że Atmega8 nie posiada wyjść tosc1/2. Poradzono mi aby sam uC pracowal na wewn. układzie RC a zegar na zewnetrznym oscylatorze. Szukałem info na temat zmiany konfiguracji ale nie mogę wymyśleć co zmienic w kodzie...
Freddie, ok wiem, ze to zależy od czasu działania przerwania uartu. Przeciez z tego co napisałem łatwo wywnioskować, że przerwanie od uartu jesli nastąpi miedzy przerwaniami od pwm'a to wymaga szybkosci takiej aby zakończyło się przed następnym wywołaniem przerwania od timera. ale opoznienie miedzy bajtami musze zrobić jakoś inaczej. Pomożecie? a Co...
Niestety nie potrafię tego przełożyć na Bascom więc , może przedstawię Ci koncepcje jak to pisałem ok ? Aktualnie dla jednej napisane bo nie mam jak dołaczyć drugiego ( jestem niestety po za miastem ) , ale nie ważne . Więc jesli patrzyc z perspektywy jednego 8x8 : Ustawiłem Timer na f = 50 Hz * 8 ( kolumn ) . W obsłudze przerwania wpycham do rejestru...
Witam! Mam problem z pomiarem z adc a dokladnie z tym ze wynik pomiaru skacze na lcd przy napieciu 12V w zakresie od 8V do nawet 12V. Probowalem dawac opoznienie w odczycie a takze dodalem po 2 kondensatory 100nF na kazde wejscie adc ale nic to nie dalo. Dodam jeszce ze jak mierze napiecie z modułu uruchomieniowego w ktorym mam regulowane napiecie od...
W ASM rozwiązanie Twojego problemu wygląda następująco: [syntax=text] ;DDS DEMO by Bobeer 2012 ;MCU - ATTINY13A ;XTAL - no ;EXT OSC 16,384kHz startup 14CK+64ms BOD=DISABLE CKDIV8=OFF ;minimalna rozdzielczość kroku to 10Hz/256 (0,0390625Hz) ;minimalny "okrągły" krok 10Hz ;maxymalna czestotliwosc 327,68kHz ;regulacja pwm 8bit 0=0V 255=VDD-1bit ;-------------program...
Z góry przepraszam za zamieszczenie całego programu - i tak jest okrojony do minimum - ale gotowy do skompilowania (ICCAVR) Chciałem uniknąć pytań z cyklu a co masz jeszcze w programie - może się gryzie... Problem dotyczy wysyłania danych za pomocą interfejsu RS232 w procesorze AT Mega8 ( pewnie i innych ale ja wałkuje akurat ten ) Nie moge dojść dlaczego...
Mam ATMega8 i podłączony do niego wyświetlacz LCD (8 znaków, 1 linia). Po wpisaniu poniżeszgo programu nie ma żadnej konuikacji z LCD. Dane do LCD wysyłane są po 4 bity. Używam kompilatora winavr. Gdzie zrobiłem błąd?? plik lcd01.h #ifndef LCD_H #define LCD_H #include <avr/io.h> #include <stdlib.h> #include "avrlibdefs.h" #include...
Witam. Mam problem z inicjalizacją wyświetlacza LCD w trybie 8 bitowym. Jeżeli ktoś czuje się dobrze z asemblera i ma ochotę pomóc mi znaleźć problem to będe bardzo wdzięczny. Układ pracuje z kwarcem 16MHz i zasilany jest napięciem 5V .include "m128def.inc" ;KONFIGURACJA LINII ATMEGA128 .EQUK_ST_LCD_DB=DDRC;Kierunek portu STEROWANIA WYSWIETLACZEM...
Może zrób tak: If Pind.2 = 0 Then 'i jest wciśnięty przycisk PIND.2 Incr Opoznienie_odczytu 'no bo przycisk ma drgania dłużej niż 237us- niech zwiększy 'to sprawdzanie powtórne do 17ms If Opoznienie_odczytu >= 70 Then 'dajmy mu na wygaszenie drgań 17ms If Temp0 = 0 Then ' i jest zezwolenie na zmianę stanu Gosub Ustawianie Temp0 = 1 ' zablokuj zezwolenie...
Po pierwsze jesli ustawiasz bity WGM21 i WGM20 to licznik dziala w trybie fast PWM. Po drugie, ale pewnie mniej wazne, sei() daje sie po skonfigurowaniu wszystkich licznikow. Po trzecie timer2 odlicza tylko 1ms a ty potrzebujesz 1s co daje ci 100 przerwan ray ponad sto taktow opoznienia, ale to i tak nie powinno wyjsc okolo 2 -3 s.
Nie używasz magicznego słowa na 'v' w deklaracji zbędnej zmiennej flaga, która zresztą powinna być typu _Bool. Druga wersja kodu, ta działająca, jest nieco zgrabniejsza.
Sugeruje dać pomiędzy instrukcjami: [syntax=vb] Print "ATH" ; Chr(13) ; 'rozłączenie dzwonienia Print "AT" ; Chr(13) ; [/syntax] opóznienie chociażby 20ms
sama pętla for dodaje jeszcze 3 cykle zegarowe, popatrz na liczbę wykonań pętli dla 8MHz zegara pierwsza to 70*3/8000ms + 70*1ms = 26,25µs + 70 ms druga 70000*3/8000ms + 70ms = 26.25ms + 70ms różnica jest ogromna...
Udało mi się odpalić program z książki Pana Wiązani, ale tam timet odmierza 1s Jak to przeliczyć? Jest jakiś na to wzór? Rzeczywiście musiało się 'udac odpalić' bo ten program nie jest pozbawiony błędów (!) \ A jak zrobić żeby odmierzał np 10 sekund? Zmiana preskalera wydłużyła max do 2sekund czas. Aby timer1 odmierzył inne/dowolne interwały czasu,...
SET_E; LCD = ((LCD & 0xF0) | (x & 0xF0)); CLR_E; SET_E; LCD = ((LCD & 0xF0) | (x & 0x0F) << 4); CLR_E; Chyba przekombinowałeś Spróbuj tak: SET_E; LCD=(LCD & 0xF0) | (x >>4); CLR_E; SET_E; LCD=(LCD & 0xF0) | (x & 0x0F); CLR_E; Nie...
a _delay_ms i _delay_us Ci nie wystarcza ? Do opóźnień nie trzeba wykorzystywać koniecznie przerwań timera. Można wykorzystać flagi timera (o ile się da, ale wszystko zależy). Poza tym, zmienna deb w Twoim programie zapewne nie jest volatile, ale wrzuciłeś nam NIC, także pomoc też nijaka
Powód jest bardzo prosty: zmniejszenie zmiennej w pamięci nie jest operacją atomową. Co prawda za każdym razem następuje odczytanie zmiennej, zmniejszenie jej a następnie zapis, to jeśli przerwanie wystąpi pomiędzy odczytem a zapisem, to utracisz zmianę dokonaną w przerwaniu. W przypadku gdy przerwanie i funkcja main konkurują o jeden zasób, musisz...
Nie wiem w jakim środowisku piszesz ale w AVR Studio musisz też podać częstotliwość zegara z jaką układ będzie pracować. Inaczej źle Ci powylicza opóźnienia _delay_ms i _delay_us
Z mojego doświadczenia z impulsatorami mechanicznymi wystarczą 4 ms opóźnienia.
Zacznij od tego: funkcja wait i pokrewne PRZESTAŁY ISTNIEĆ. Do opóźnień i odmierzania czasu użyj timera i ogólnie poczytaj o timerach.
Wprowadziłem te wszystkie zmiany, wyeliminowałem pętle WHILE, nadal procesor nie odczytuje wejść podczas wykonywania programu, czy możliwe jest że jest za wolny i wczyta te zmiany ze znacznym opóźnieniem?
bo nie masz wygaszania diodek: if (pomiar < 250) { PORTD |= (0<<PD5);//zapalamy pd5 PORTD &= ~(1<<PD6);//gasimy pd6 } else { PORTD |= (0<<PD6);//zapalamy pd6 PORTD &= ~(1<<PD5);//gasimy pd5 } delay_ms(10); PS. czemu nie używasz biblioteki util/delay.h...
Som 'kwadraty' czyli zasilanie ok. Nic się nie dzieje a potem wszystko znika.... czyli błędy w transmisji: -złe opóźnienia -błędne połączenia Też próbowałem tych programów... napisałem se własne, chcesz podeślę.
Problemem jest to, że właśnie w takim programie jest się ciężko połapać, bo dane nie są czytelne. Jedno co mi się rzuca na pierwszy rzut oka - pętla powinna być symetryczna, a jej 2 pierwsze linijki nie są rozdzielone opóźnieniem...
Przy przełączaniu przetwornika miedzy kanałami dobrze jest odczekać chwilke czasu po zmianie kanału. Wynika to z zaklocen wystepujacych podczas przelaczania multipleksera: jesli przy nowym pomiarze biezacy kanal zostal zmieniony, to przez pewien czas na wejsciu przetwornika wystepuja stany nieustalone. Mozna zrezygnowac z tego opoznienia, jesli pomiary...
Hmm, czy takie coś by się sprawdziło? :D $crystal 1000000 dim 5min as byte Config Timer1 = Timer, Prescale = 1024 On Timer1 Opoznienie On Interrupts Enable Timer1 Load Timer1 = 65535 Opoznienie Load Timer1 = 65535 incr 5min If 5min = 5 Then *********** 5min = 0 End If Return
Już dokładnie nie pamiętam, ale chyba uzywałem bibliotek ze strony: [url=http://www.tinkerer.eu/AVRLib/nRF24... Przesyłanie między dwoma atemgami chodziło bardzo bobrze, sygnały zawsze docierały bez żadnych opóźnień.
Ja praktycznie wszystko co robię z AVRkami to zawsze docelowo jest to w obudowie TQFP albo SMD. Atmega8, ATmega88, ATmega32 - tych to już naprawdę całe mnóstwo przeszło mi w ten sposób przez ręce i nigdy ale to nigdy nie zauważyłem jakichś różnic w programowaniu pomiędzy TQFP/SMD a w obudowie DIP Oczywiście zawsze gdy robię jakiś prototyp to najpierw...
Mozliwe. Ale skoro mam ustawiony PORTD (piny danych wysylanych do wyswietlacza) ustawione na OUT, to jak czytac stany wymuszone na nich przez LCD (status)? Uzywam CodevisionAVR. A co do petli... stosuje je bo w katalogu sa podane minimalne odstepy czasowe miedzy wyzwalaniem odpowiednich stanow na pinach. Wynosza one srednio min. 80ns wiec musialem dac...
Nie wiem co z tym zatruwaniem, mam zegary Nixie działające po 15 lat, nic się nie dzieje, lampy też nie były nowe a z multimetrów. Wyłączaj całkowicie lampy, włączeniem czujnikiem mikrofalowym czy IR z opóźnieniem wyłaczenia
Ja puścił program w pętli (samo reset-response) i popatrzył oscyloskopem, w ostateczności zacznij od "spowolnienia" opóźnień do rzędu kilku s i sprawdź woltomierzem czy przebiegi się zgadzają.
Nie, jest ok. Jeśli wysyłasz 0 to powinno być 0 przez 80 us, jeśli 1 to powinno być 1 przez 80 us. Jak widzisz w obu przypadkach kod opóźnienia jest taki sam, stąd też nie ma potrzeby wykonywania kodu alternatywnego (else).
Rezystory są, a program nie zawiesza się w TWI. Przy programie z postu#6 po komunikacji z RTC i przepisaniu wartości na port z ledami, program sprawdza jeszcze czy ten port jest różny od zera po czym wykonuje opóźnienie 5s, zeruje port i idzie spać. Gdyby się zaciął w TWI nie wykonałby już gaszenia ledów po opóźnieniu.
Zdaje mi się, że gdzieś łudząco podobny schemat już widziałem. Mniejsza z tym. Dobrze by było gdybyś opisał jakie są objawy tego "niedziałania". Schemat wygląda w sumie poprawnie, ale zanim uznasz procesor za uszkodzony zweryfikuj dokładnie częstotliwość taktowania i... może ewentualnie jakieś opóźnienia wstawić przed wysłaniem danych do LCD.
Dziwne ale przepisałem Twój kod i skompilował się poprawnie . Używałem Eclipse, na dowód że wszystko OK zamieszczam plik main.c i skompilowany .hex. Mała uwaga pomyliłem tylko czas opóźnienia zamiast 1000 ms dałem 100 ms, lecz to na pewno nie jest przyczyną.
Jakieś wymagania odnośnie magistrali/zasilania/poboru prądu itd? Fram jest bardzo szybki - nie ma opóźnienia w czasie zapisu i jest praktycznie niezniszczalny (jeśli chodzi o cykle zapis/odczyt).
Dlaczego nie? Wątek, który podałeś jako przykład to stek bzdur. Przy pomocy delay_ms można realizować opóźnienia bardzo długie, z pewnością przekraczające 3000ms: http://mikrokontrolery.blogspot.com/2011...
W sprawie opóźnień polecam artykuł: void _delay_ms(double _ms) Funkcja powoduje opóźnienie o _ms milisekund. Maksymalne generowane opóźnienie wynosi 262.14ms / F_CPU(w MHz). Jeśli podana wartość przekracza dopuszczalne maksimum, funkcja działa ze zmniejszoną rozdzielczością (0.1ms) generując opóźnienia do 6.5535s niezależnie od częstotliwości pracy...
Pokaż jak ustawiasz fuse bity. Popróbuj także z różnymi opóźnieniami po resecie.
A co oznaczają liczby 10 w każdej parze parametrów w tablicy? Niedokładnie przeczytałeś mój ostatni post: w tablicy na pozycjach opóźnienia podawać 0 dla krótkiego i 1 dla dłuższego (ponieważ autor używa tylko dwóch)
Generalnie powinno to działać aczkolwiek mam 2 propozycje: -zadeklaruj sobie zmienną np Time i wywołuj opóźnienie jako _delay_ms(Time) bądź utwórz własną funkcję opóźnienia, w której co najwyżej wykorzystasz _delay_ms() lecz będziesz robił to tak by zmieniać prędkość obrotu. Ponadto proponuje napisać funkcje dla pracy pół krokowej - silnik będzie pracował...
Po pierwsze nieużywane podciąg, robi się to bardzo prosto przez np PORTB=0xff. A po co to cię ja moge zapytać po co głowe zawracasz na forum? Albo jak objawiają ci się te przesłuchy pomiędzy kanałami? Ta deklaracja value to też byś dał zaraz po main{ żeby było ładnie. Daj te opóźnienia większe. Tak ze 300, nie wiem ile to jest 300 u ciebie. Więc może...
atom1477, dzięki za kolejne uwagi, informacji o $initmicro na pewno się przyda - nie omieszkam też jej sprawdzić. Funkcja InitLCD po ustawieniu 0 na końcówce RW działa bez zarzutu i to w dodatku bez zastosowania opóźnienia. ;)
L298 jest sterowane poziomami TTL, a nie prądami, więc stosowanie bufora jest zbędne. Tranzystor spowoduje odwrócenie fazy i dodatkowe opóźnienie, o czym trzeba pamiętać. Charakterystyki opóźnień sygnałów In oraz Enable są podane w karcie katalogowej układu i tam należy się udać w celu dokładniejszych sprawdzeń.
Hej! Potrzebuje napisac np. nastepujacy program dla robota: prawe kolo jedzie do przodu, po jakims czasie(na razie dowolnym) zatrzymuje się. Problem polega na tym, że nie działa opóźnienie. Moje testy wskazujna to, że procek nie wychodzi z pętli opóźniającej (wykonuje się wszystko do tej pętli). Należy zauważyć, że wszystko z osobna działa (opóźnienie...
Nie chodzi mi o optymalny kod itp., chcę tylko by ATMEGA miała poprawne dane w pamięci! Ale Twoje rozwiązanie transmisji jest najgorsze z możliwych...dlatego masz z nim problemy. ISR(USART_RXC_vect) { buf_odbioru[poz_znaku_odbioru]=U... if(buf_odbioru[poz_znaku_odbioru... && buf_odbioru[poz_znaku_odbioru-1]...
Marcin1326 : Tak na marginesie pomyśl o zapewnieniu atomowego dostępu do zmiennej "time" - jeśli pomiędzy zapisem pierwszego a drugiego bajtu pojawi się przerwanie, to mogą się dziać różne dziwne rzeczy (tutaj co najwyżej opóźnienie inne niż oczekiwane). Tak jak wpisanie do "time" można raz rozwiązać atomowo (zapisanie SREG, cli(), operacja i odtworzenie...
Biblioteka do DS18B20
Musisz powalczyc kodem. To taka dziedzina gdzie zdalnie pomóc sie nie da (timingi, opóźnienia otp). trzeba ekspoerymentować.
Możesz jeśli to uwzględnisz w programie:) Musisz zmodyfikować opóźnienia.
Nie znam się na bascomie, ale czy w petli do loop nie powinno być Pwm1a = X, b tak jak zostało napisane to wygląda jak by było z czytywanie raz z addc raz z pwm. I takie pytanie co do zadeklarowania częstotliwości czy to coś w ogóle da, w zasadzie funkcje delay i inne wykorzystujące opóźnienia po prostu wykonają się szybciej, czyli tak jak by zmniejszyć...
Witam, napisałem program ,który ma za zadanie sprawdzać temperatury i wykonywać poszczególne zadania. Można powiedzieć, że wszystko jest okey, ale czasami program sam przechodzi z Menu do Piec Maks_temp, i przyciski czasami działają z opóźnieniem. Kolejnym problemem jest zwieszanie się procesora, po ustawieniu maksymalnej temperatury Bojlera. Proszę...
albo wykorzystaj timer uC zamiast przerw
Popraw opóźnienia i wyłącz optymalizację.
Jest jeszcze coś takiego w Bascomie jak INITLCD. Spróbuj po opóźnieniu, a przed wejściem do pętli użyć tej instrukcji, która inicjuje LCD. Sam w sobie program powinien inicjować LCD, ale wpisać INITLCD nie zaszkodzi. Sprawdź jeszcze czy przy uC nikt nie majstrował wcześniej i nie ustalił mu taktowania wyżej niż wskazane w programie - 1MHz.
Wiesz narazie uruchamiam tylko to co wrzuciłem na forum , wydawało mi się że bez tego opóźnienia powinno być w porządku ... Nie mam więcej pomysłów w czym tkwi problem... Oczywiście nie zostawię tego opóźnienia...
Marcin - dziękuję
Mikroprocesor to atmega8? Znalazłem rozwiązanie na opóźnienia - pamięć FRAM tylko że ta cena - 25zł za 64k
Wykorzystuję Bascom wiec niestety nie sprawdzę tych funkcji. Jaki problem przepisać na Basic? Nie jest to większym problemem, ale wolałbym nie wykorzystywać dodatkowego przerwania. A ja chce wyeliminować dodatkowe przerwanie i poza zerem sieci nie chce dodatkowych przerwań To wybrałeś zły procek. Preskaler w AVR jest mało elastyczny i aby wykorzystać...
Kiedyś robiłem coś podobnego i wykorzystałem taki sposób. Zrobiłem sobie flagę która informowała mnie że odebrałem liczbę. Potem prosty warunek typu: If odebrano = 1 then a=odebrana_liczba do If odebrano = 1 then b= odebrana_liczba gosub label1 end if end if loop W podprogramie label1 miałem pętlę w której był sprawdzany warunek odbioru itd. aż do odebrania...
http://tomeko.net/termometr.php -> projekty testowe dla ATmega8 i PIC18F2550. Przewód ma u mnie około metra - taka sama zwykła płaska taśma, kondensator przy czujniku. Nie zauważyłem by był wrażliwy na dotykanie. W main.h zdefiniowane jest F_CPU warunkujące opóźnienia w bibliotece delay i ustalające baudrate dla RS232. Jeżeli będzie wyższe niż rzeczywiste,...
Można sprzętowo zwiększyć wartość kondensatora przy fotorezystorze, albo programowo: 1. Dodać stałą oraz jedną zmienną globalną na początku softu: #define OPOZNIENIE 15 double jafil; 2. Zamienić linie: adcval = ADC; // odczyt wyniku z ADC na te dwie linie: jafil = (OPOZNIENIE * jafil + ADC) / (OPOZNIENIE+1); // filtr wartosci z ADC adcval...
Nie pasują mi te twoje opóźnienia, PCB poprawne;>
A jaką wartość opóźnienia widziałeś w dokumentacji technicznej układu DS18B20?
chudybyk - oczywiście masz rację. Nie wiem jak mogłem tego nie zauważyć! Poprawiłem te dwie funkcje. Niestety dalej nic się nie dzieje. funkcje wyglądają teraz tak: [syntax=c]void lcd_command(uint8_t data) { LCD_CPORT &= ~(1<<LCD_RS); asm ("nop"); lcd_send(data); _delay_us(120); } void lcd_data(uint8_t data) { LCD_CPORT |= (1<<LCD_RS);...
Nie odłączaj resetu, ale może dodaj chociaż klawisz reset do tego. Skoro nie przestawiłeś fusebitów to uC pracuje na wewnętrznym oscylatorze 1 MHz. Skoro program napisany jest pod kwarc 32 kHz to np wszystkie opóźnienia są ponad 30 razy krótsze niż powinny. Opóźnienia są ważne w procesie inicjalizacji LCD, dlatego też nie działa. Jak ustawić fusebity?...
W programowaniu raczej jestem słabym amatorem, lepiej sie czuje w projektowaniu. Zamiast detekcji sieci, można wykorzystać brak 100Hz jako informację o zaniku zasilania, to najszybsza metoda, bez opóźnień RC.
kol. MirekCz chodzi o to abyś zobrazował sobie pomiar przetwornika za pomocą diod Led , dokładniej nie całe słowo tylko 4 najstarsze bity na dowolnym porcie , osobiście polecam jednak LCD bo szybciej i prościej sprawdzisz faktyczny stan , czy sprawdzałeś układ z dodaniem opóźnienia ?
Ok dołożenie opóźnienia 1us rozwiązało problem. Dzięki za pomoc.
Chyba już wiem o co Ci chodzi i jak to zrobić :) i jak dobrze pójdzie to tym sposobem od razu rozwiąże problem wprowadzenia małych opóźnień w przeskakiwaniu w menu.
buzer
Nie bardzo jest co komentować, bo najważniejszej procedury (ISR) nie pokazałeś. Jedno jest pewne: Taka konstrukcja i wywołanie procedury 800_ms zakończy się opóźnieniem programu głównego o parę mikrosekund i tyle. Zmienna Licz_8ms będzie się inkrementować tzw. "sobie a muzom". Co więcej, nawet jakbyś poprawnie skonstruował tą procedurę to dalej zamiana...
dziekuje za odpowiedź w moim przypadku prowdopobonie chodzi o wbudowany zegar 1MHz w jaki sposó liczyć czas opóźnień w tym przypadku pozdrawiam
Ano dlatego, że gdy wciskasz przycisk w procku wywoływane jest przerwanie... A że trwa ono sekundę... o tyle "wydłuża" się czas tego delaya w pętli głównej... Po tej sekundzie (gdy masz wciśnięty przycisk) wywoływane jest kolejne przerwanie - kolejna sekunda... itd... Rozwiązanie... wywal delaya z przerwania. Edit: Maksymalny czas opóźnienia wynosi...
Za małe opóźnienia? Coś się nie zdąży opóźnić... <wróżbita>:)
Najpierw posprawdzaj dokładnie czy wszystko masz w porządku ze stroną sprzętową. Zobacz przede wszystkim jaką masz częstotliwość taktowania ATmegi. Jak będzie inna niż zakłada program to zmienią Ci się opóźnienia a na te DS18B20 jest czuły. Dobrze też zastosować kwarc zewnętrzny zapewniający bardziej precyzyjne odmierzanie opóźnień niż generator wewnętrzny.
Najprostsze rozwiązanie - w przerwaniu od czujki uruchom sprzętowy timer. Przerwanie od timera powoduje włączenie alarmu. Jeśli użytkownik wyłączy system przyciskiem, to w procedurze przerwania przycisku wyłączasz timer. Żeby wszystko działało jak trzeba, musisz zezwolić na zagnieżdżone przerwania (czyli żeby ISR od timera mógł się wykonać w momencie,...
Temat rozwiązany. Zamykam.
8 Mhz Rozjaśniają i ściemniają do końca...tylko że bardzo wolno i opóźnienia są kilka razy większe niż powinny
Witam.Da się to zrobić.Kwestia tylko czy tekst ma być wpisany w program czy ma być możliwość jego wprowadzania z zewnątrz?Tekst ma być jak piszesz wyświetlany na pojedynczym LED czyli litera po literze z opóźnieniem?. pozdrawiam
Witam Mam LCD http://www.lispol.pl/index.php?site=deta... dokładnie ten I napisałem ten oto kod, ale niestety nie działa. Nie wiem co źle robie, dlatego poprosiłbym o sprawdzenie, nie o gotowca, tylko sprawdzenie i wskazaniu gdzie tkwi błąd, gdyż to praca inżynierska a promotora nie ma w tej chwili w kraju :). Dodam, że Enabled podłączyłem do...
Mam panowie takie pytanie, jak część kodu wykonywać z prędkością 8MHz a część 2MHz. Czy wystarczy dać jakieś opóźnienia a jak tak to jakie?
przycisk opoznienie opoznienie wlaczenia opoznienie zalaczania
żelazowanie grotów głośnik wymiana magnes zegar regulator
falownik anenji falownik anenji
Renault 1.5 dCi – stukanie silnika przy zimnym rozruchu, przyczyny i diagnostyka Jak dograć historię produkcji falownika w FusionSolar?