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...
Niestety nadal występuje ten sam problem :cry: Problem wystąi niezależnie czy naciśniesz F10 czy F11 bo funkcje delay są inlinowane, więc co prawda tego nie widzisz, ale ich ciało jest osadzane w miejscu wywołania. Najlepiej ustawić breakpointa za delay i dać F5. A jeszcze lepiej zrobić tak, żeby dla celu debug przy symulacji preprocesor wywalał delay.
SIGNAL(SIG_OVERFLOW0) - w ten sposób definiowały obsługę przerwania jeszcze nasze babcie i jeszcze za ich czasów wprowadzono nowy sposób - ISR(TIMER0_OVF_vect) 3-sekundowy delay w przerwaniu? "Super" pomysł.
Przerwać delay możesz tylko przerwaniem. Jeśli chcesz mieć możliwość normalnie przerwania delay to rozbij je na sekwencje kilku mniejszych opóźnień pomiędzy którymi sprawdzaj stan przycisków. A najlepiej zrobić to przy pomocy timerów i przerwań.
Wstaw delay także pomiędzy PORTC=0x3F; PORTC=0x0; // binarnie: 000000 O tak: PORTC=0x3F; _delay_ms(1000); PORTC=0x0; // binarnie: 000000
Czy jest możliwość, aby po powrocie z przerwania na PORTC pojawiła się ostatnia wartość sprzed wywołania tegoż przerwania? O ile dobrze zrozumialem twoj problem to rozwiazanie jest proste - na poczatku przerwania zapamietaj stan PORTD w jakiejs zmiennej i odtworz go na koncu obslugi przerwania. Co do delay w przerwaniu to sie nie przejmuj tym co pisza...
Spróbuj wpisywać doświadczalnie jakieś wartości w polu port delay i zobacz co się dzieje.
a czy odczekujesz, aż pamięć zdąży wykonać operację zapisu? Potrzeba jej na to ok 10ms. Byćmoże symulator to tego nie uwzględnia. Wstaw delay między poszczególne operacje zapisu do pamięci, lub testuj flage zakończenia zapisu do pamięci.
To co zrobiłeś nie miało prawa zadziałać z wybraną płytką NG, ona ma ustwienie na kwarc 16MHz: c:\Program Files (x86)\Arduino\hardware\arduino\avr\board... ... ########################################... atmegang.name=Arduino NG or older atmegang.upload.tool=avrdude atmegang.upload.protocol=arduino atmegang.upload.speed=19200 atmegang.bootloader.tool=avrdude...
Tak, to dziwne delay po prostu zastąp przez _delay_ms, __flash nie możesz usunąć, ale jeśli istotnie masz AS 6.0 to go uaktualnij do najnowszej wersji 6.2, a tam siedzi avr-gcc 4.8.1, który __flash rozpoznaje.
Oj kolego jest wyraźnie napisane: Jestem początkującym programistą... wiec gotowca nie ma co dawać bo człowiek się nie uczy tylko bezmyślnie go używa. Podejrzewam że nie potrafiłby jeszcze zainicjować odpowiednio timer, skoro nie znalazł odpowiedzi na prosty problem. Tak poza tym z timerem tez procek się kreci bez celu oczekując na wciśniecie przycisku....
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,...
oraz jeszcze: 1. stosujesz stare funkcje obsługi przerwań a nowe wektory - stosuj nowe funkcje ISR(): http://nongnu.org/avr-libc/user-manual/g... i wywal nagłówek #include <avr/signal.h> 2. returny w funkcjach ISR() i main() są zbędne. 3. Ostatnia uwaga kol Zaquadnik jest baaaardzo istotna. Nie dość, że czekasz w funkcji...
Kolego Robaku w bibliotece lcd.h mam taką linijkę: #define XTAL 1000000 /**< clock frequency in Hz, used to calculate delay timer */ Jednak czy to w jakiś sposób może wpływać na działanie funkcji delay.h w pętli głównej programu ? Nie ukrywam, że to właśnie także do obsługi LCDka ten poprawny delay, ktory powinien dawac równo sekunde przy wywołaniu...
To by i tak nic nie zmieniło bo tamten kod wykonuje się co sekundę ;) Trzeba by wyjąć wtedy minuty spod tego IF`a sekund :P To też nie wiele da, bo processor jest zajęty w 50% liczeniem czasu dla delay (500 mS w każdej sekundzie!) plus kilka cykli na zmianę wartości flag i portów wyjściowych przez co praktycznie występuje zwłoka w reakcji na przycisk...
z tego co wiem to delay to komenda to odliczania czasu w mikrosekundach, a do dokładnego odliczania czasu należy używać funkcji Timer.
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...
Witajcie, W oparciu o Atmegę8 zrobiłem sobie prosty sterownik. Odczytuję temp. z dwóch czujników ds18b20 i na jej podstawie steruje elektrozaworem. Chciałbym dodatkowo wprowadzić obsługę 3 przycisków. Problem w tym, że sam odczyt temp. z czujek powoduje pewne opóźnienia np. czas konwersji jest dosyć spory bo 750ms w związku z tym reakcja na przyciśnięcie...
Witam ogarnąłem już dużo na temat programowania w bascom, tylko mam kolejny problem, mianowicie chciałbym zaprogramować obsługę serwa pilotem nadającym w RC5 lecz gdy połączę obsługę rc5 i serwa mam takie błędy i nic nie działa: ........ Pojedynczo programy działają ok. ................. Rc5+ servo (nie działa) Pozdrawiam. Zauważ że zarówno 'Config...
Dzięki za pomoc nie pomyślałem, że mogę skorzystać z symulatora i obliczyć czasy na jego podstawie. Takie jeszcze jedno pytanko z jakiego symulatora korzystasz? Bo mi w AVR Studio 4 wyszło do opóźnienia ok 480 us : ow_delay_us(200); ow_delay_us(182);
Nawet z uwzględnieniem zmniejszenia dokładności (które przy wykorzystaniu aktualnej wersji avr-gcc przy typowych opcjach kompilacji nie występuje – patrz fragment If the avr-gcc toolchain has __builtin_avr_delay_cycles(unsigned long) support w dokumentacji) te funkcje (jako same w sobie) są całkiem niezłe. W praktycznych zastosowaniach ich niedokładność...
Cześć, Gratuluję udanego i ciekawego projektu. Pewnie spędziłeś nad nim sporo czasu. Boję się, że mało osób używa języka Pascal do programowania układów AVR, skoro teraz króluje język C. Czy możesz udostępnić przykładowy kod typu blink led dla Atmega8 lub innego procesora, żeby przypomnieć sobie ten język programowania? Pozdrawiam, Rafał -:) Dziękuję...
Da się :) [syntax=bash] $ avrdude -v -v -c usbasp-clone -p atmega8 -U flash:w:nadajnik.hex avrdude: Version 6.3-20171130 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "/etc/avrdude.conf" User configuration file is "/home/test/.avrduderc" User configuration file does...
Witam, Używanie funkcji _delay_ms(); ze zmienną nie jest dobrym pomysłem. Taka implementacja zajmuje bardzo dużo pamięci. Lepiej zadeklarować funkcję np. _delay_ms(1); i wykonywać ją w pętli tyle razy ile potrzeba. Liczbę wykonań pobieramy z tablicy.Taki sposób jest zdecydowanie mniej pamięciożerny. Pozdrawiam, Marcin
Witam ! Arduino IDE, zapis /odczyt do wewnętrznego EEPROMU. Jak spowodować aby PIERWSZY odczyt np. komórki "0" nie wyświetlał 255 ? ATmega8 [syntax=arduino] #include <LiquidCrystal.h> #include <EEPROM.h> LiquidCrystal lcd(19, 18, 17, 16, 15, 14); float temp = 0.50; void setup() { EEPROM.get(0,temp); } void loop() { lcd.clear(); lcd.setCursor(0,...
Kit jest fabryczny AVT sam nic nie lutowałem. Kwarc 32768Hz. to jest kwarc układu MCP7940. Atmega8 na schemacie nie ma kwarcu i piny "kwarcowe" sterują czymś na wyświetlaczu, więc μC pracuje na wewnętrznym oscylatorze RC, który ustawia się fuse bitami. Funkcje takie jak _delay_ms, _delay_us potrzebują tego makra, żeby poprawnie działały. Definicje...
Witam serdecznie mam problem ze skompilowaniem tego programu czy w eclipse wogole go skompiluje [syntax=c] /***************************************... * vim: set sw=8 ts=8 si : * Author: Guido Socher, Copyright: GPL * This is the main program for the digital dc power supply * * See http://www.tuxgraphics.org/electronics/ * * Chip type : ATMEGA8 *...
Podłączyłem JTAGICE mkII do Atmega 32 w komercyjnym urządzeniu żeby ocenić czy procesor nie jest uszkodzony i jakiś cudem po moich eksperymentach procesor okazał się wyczyszczony. Przy pierwszych odczytach lock bity miały wartość 0xC0 (wszystko zablokowane), przy kolejnych zrobiło się 0xFF. Praktycznie urządzenie jest już stracone, procesor wyczyszczony...
Innym sposobem emulowania klawiatury w bascom jest biblioteka "at_emulator.lbx" (zdaje się płatna). MCU z tą biblioteką emuluje na dowolnych pinach standard PS2. Wystarczy wtedy konwerter PS2 -> USB. (kosztuje grosze). '---------------------------------------... ' PS2_KBDEMUL.BAS ' (c) 2002-2003 MCS Electronics...
Sory, już się poprawiam [syntax=c]#ifndef LCD_H #define LCD_H #if (__GNUC__ * 100 + __GNUC_MINOR__) < 303 #error "This library requires AVR-GCC 3.3 or later, update to newer AVR-GCC compiler !" #endif #include <inttypes.h> #include <avr/pgmspace.h> /** * (at)name Definitions for MCU Clock Frequency * Adapt the MCU clock frequency in Hz...
Witam, mam problem z zaprogramowaniem procesora attiny24. Używam programatora avr910 na usb oraz avrdude. W programie działa dobrze odczyt i zapis eeprom, odczyt fusebitów ale nie mogę odczytać ani zapisać flash'a. Po wgraniu jest błąd weryfikacji i bardzo długo trwa proces wgrywania flasha. około 130s. Procesor Attiny24 mam podłączony bez kwarcu, czy...
Witam. Borykam się z pewnym problemem. Otóż nie mój procek nie odmierza dokładnie czasu. Częstotliwość jest ustawiona na 8 MHz i w trakcie wykonywaniu programu, gdy avr napotka się na _delay_ms(1000); zamiast odmierzyć sekundy odmierzy ok. 5 sekund. Dodam, że na ATmedze8 wszystko działa poprawnie, lecz jestem zmuszony korzystać z 328P ponieważ ma więcej...
Napisałem fragment programu sterowania mostkiem H na razie nie pokazuje błędów ale jeszcze chciałbym miec miekki start silnika DC, może delay wewnątrz pętli ? [syntax=arduino] //poczatek do produ //podział sygnału +/- 50 if(nThrottleIn>1550){ if (pwM1a>=255) pwM1a=255; pwM1a = map(nThrottleIn ,1550, 1995, 0,255); digitalWrite(in1a , HIGH); digitalWrite(in1b...
Niby banał, a siedzę już drugą godzinę Jest tak: ATMEGA32, nie wiem dlaczego nie działa _delay_ms(). Diodki podłączone do portu migają z jakąś przypadkową częstotliwością. Kod: #include <avr/io.h> #define F_CPU 16000000 #include <util/delay.h> int main(void) { DDRA=0xff; while(1) { PORTA ^= 0xff; _delay_ms(6500);...
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...
Jeśli program reaguje na zmiany F_CPU, a nie reaguje na zmianę parametru _Delay_ms to jest to mega dziwne. Zawsze mam takie szczęście :D. Brak świecenia diody. Przypominam, że programując port PA1, delay również nie działa. To w końcu to działa, czy nie? delay_ms nie działa, natomiast zmiana MCU reaguje na częstotliwość migania diody. Sama dioda miga....
Wystarczy wykryć zbocze opadające na wejściu przypisanym do przycisku, a po instrukcji delay zgasić diodę.
Dodaje nieusuwalną przez kompilator instrukcję asemblera "nop" (nic nie rób, bodajże 1 cykl i 1 bajt) nie pozwalając tym samym na usunięcie "nic nie robiącej" pętli. Nie jestem teraz pewien, czy akurat w tym wypadku jest to uzasadnione, ale podejrzewam, że jest to jedno z działających rozwiązań :) Przy okazji - warto korzystać z plików .lss ! Widać...
Funkcje delay muszą być wywoływane z parametrem będącym stałą. Użycie w wywołaniu zmiennej jest błędne, prowadzi do wzrostu objętości kodu i błędnego czasu opóźnienia. Twój przykład na to również wskazuje - zmienna int z przypisaną wartością użyta jako argument wywołania delay powoduje, że optymalizator to skraca do stałej i jest ok. Jeśli użyjesz modyfikatora...
A nie ruszaj jeszcze tych fusebitów- chociaż przez parę dni. A procesor ma zasilanie? A jaki programator ustawiony w Bascomie? A delay jakie do programatora? A kable dobrze wetknięte? A zwarć nie ma? Prcesor ma zasilanie. Programator ustawiony poprawnie w Bascomie Atmega8 programuje sie bez problemow. Delay??? hmm wytłumacz o co ci chodziło. Kable...
[syntax=c] ISR(ADC_vect) { register uint8_t Voltage = ADCH; if(Voltage>TRESHOLD) { //Zapis krytycznych danych do pamięci EEPROM } _delay_ms(100); }[/syntax] Czy delay nie powinien być wewnątrz ifa?
Bo pewnie używasz delay z argumentem będącym zmienną, podczas gdy funkcje te powinno się wywoływać z argumentami będącymi stałymi.
Ale to nie jest rozwiązanie, tylko półśrodek, pisałeś że to tylko część kodu, może w reszcie programu leży problem? Gdy będziesz robił jakąś komunikacje typu SPI lub I2C (mowie o rozwiązaniu software - owym) to niestety ale strasznie spowolni Ci ten delay wręcz uniemożliwi przesył danych
bo delay zatrzymuje Ci program i jest niedokładne i wtedy Ci program się rozjeżdża przy przerwaniach i czasem _delay_ms(100); będzie Ci wykonywać się zaledwie 1000 ms zamiast 100ms
Po prostu programujesz układ taki jaki ma pracować, a więc jeżeli wykorzystuje on oscylator wewnętrzny i tak później będzie pracował, kwarcu zewnętrznego nie dajesz. Nie znam tego ISPprog-a, ale na pewno jakieś tam LPT-adres, czy Port delay można popróbować zmienić.
Robie zegarek na ATMega8 i robie go wlasnie na funkcji delay pokazanej powyzej czy to znaczy ze moj zegarek bedzie nie dokladnie odmierzal czas?? jak musze uzyc kwarca to jak go podlaczyc?? Prosze o pomoc jestem poczatkujacy.
Witam Mam atmege8 i zaczynam do programować w eclipse. Chciałem wgrać ten program: [syntax=c]#include <avr/io.h> #include <util/delay.h> #define LED (1<<PC0) #define LEDOFF PORTC |= LED #define LEDON PORTC &= ~LED #define DELAY _delay_ms int main ( void ) { DDRC |= LED; LEDOFF; }[/syntax] I nie chce mi on działać. Działa tak że...
Dodaj sobie do układu jakiegoś LEDa z rezystorem do któregoś wolnego pina. Wstaw między instrukcje while linijkę do zmiany stanu na przeciwny pina z podpiętym LEDem. Większy delay też w tym powinien pomóc. Sam zobaczysz dokąd dochodzi program.
Czerwony - vcc Biały - gnd Czarny - sck Zielony - miso Zółty - mosi Pomarańczowy - reset Niebieskie - zasilanie z programatora 5V Podłączenie jest dobre bo mikrokontroler zareagował w avrdude na -e (miałem wgrany program, bez zmian fusebitow, podlaczylem na sekundę na odwrót zasilanie,ale poprawiłem je po chwili. Avrcalculator go nie wykrywał, ale program...
Witam! Zaczynam zabawę z WinAVR. Staram się zrozumieć jak działa kompilator więc mieszam w czym się da i patrzę co się dzieje. Oto program który miga diodami LED. Nic dziwnego ale: - ten zajmuje 126 bytes (1,5% Full) Atmega8 #include <avr/io.h> #include <delay.h> #define bit_set(v,m) ((v) |= (m)) #define bit_clear(v,m)...
A co to oznacza? The maximal possible delay is 262.14 ms / F_CPU in MHz. Bo myślałem że maksymale opóźnienie.
1. Załanczać czy załaczać czy może załączać? ;p 2. Do wyliczenia odstępu czasowego można korzystać z funkcji opóźniającej zrealizowanej o timer. (funkcja powinna przyjmować jako parametr odstęp czasowy w zależności od tego ile wybierzemy z menu) 3. Robisz proste menu typu: w pierwszej linii LCD jakaś informacja - Podaj odstęp czasowy: ,w drugiej wyświetlaj...
Zadeklarowałeś częstotliwość zegara? Jeśli podczas kompilacji jest przyjmowana zła częstotliwość zegara to delay będzie źle działał. Tak samo może być jeśli użyłeś optymalizacji -O0.
delay pamięć delay pamięć funkcja delay relay delay
alarm samochód pilot awaryjne odpalanie czujnik zbliżeniowy diody pendrive odczytem danych
odkurzacz tefal odkurzacz tefal
Nice RUN 2500i i Legrand 369420 – podłączenie wideodomofonu do napędu bramy Stihl kosa spalinowa gaśnie po rozgrzaniu – przyczyny, cewka, gaźnik, simmeringi