Zastanawiam sie czy w winavr nie wystepuje blad podczas stosowania petli "while". Mianowicie podczas stosowania petli while z oczekiwaniem na zmianę wartości zmiennej w przerwaniu w glownej petli okazuje sie ,ze program sie zawiesza. Fragment kodu: ... while (! temp); ... Z listuingu wynika : ..... .L058 lds r25,temp .L059 tst r25 breq .L059 .... Z...
Nie znam się zabardzo na C, ale tak na oko to nie możesz porównywać zmiennej typu char (bo chyba tego typu jest zmienna znak) z typem liczbowym czyli znak>0 nie może być wykonane, bo porównujesz dwa różne typy. spróbuj dać znak>chr(0)
1. Ustawiasz cały portD jako wyjścia a na nim są wejścia INT którymi chcesz generować przerwania. 2. używasz starych wektorów przerwań, używaj nowych ISR: http://www.nongnu.org/avr-libc/user-manu... 3. pokaż schemat swojego układu. 4. return(0) jest zbędne. Wystarczy: [syntax=c]while(1){};[/syntax]
Ja miałem podobne problemy i okazało się, że to z powodu funkcji czasowej delay_us. Zastąpiłem ją inną i wszystko zaczęło chodzić OK. Zastosuj tą: void delayus(unsigned char t) //parametr t od 0 do 255. { do{asm("nop");}while(--t); } W miejscu gdzie masz zdefiniowaną częstotliwość oscylatora wpisz też: #define F_CPU 8000000ul
Witam. Mam nadzieję, że się nie narażę tym tematem, ponieważ był już wielokrotnie opisywany - jednak uzmysławia to jak wiele problemów może wyniknąć przy obsłudze jednej rzeczy. Sprawa jest prosta, napisany program w WinAVR20070525 nie obsługuje portu USART w mikrokontrolerze ATmega8515. Układ jest podłączony do COM'a poprzez inwerter MAX232. Podczas...
proponuję zrobić najprościej jak się da #define F_OSCILATOR 8000000 #define MYBOD_RATE 9600 #define UBRR_number (F_OSCILATOR/(16ul*MYBOD_RATE... int main(void ) { UBRRL =0xFF & UBRR_number; UBRRH = 0x7F & (UBRR_number>>8); UCSRB = (1<<RXEN)|(1<<TX... /* Set frame format:...
Witam while (flag_ADCDONE_IS_RESET) flag_ADCDONE_RESET; Może brakuje średnika po while ?
To właśnie zostało uruchomione - musi działać. Pisane pod WinAVR [syntax=c] #define SET(port, bit) port|=(1<<bit) #define RESET(port, bit) port&=~(1<<bit) #define NOT(port, bit) port^=(1<<bit) //Przerwanie wywolywane 100 razy na sekunde ISR(TIMER1_COMPA_vect)// == SIG_OUTPUT_COMPARE1A { NOT(PORTD,PD6); } int main (void) { SET(DDRD,PD6);...
Po zmianie fuse zamiast prostokątów pokazały się krzaczki i na końcu kursor. Jak wgrałem program od Pana m.bartczak niestety nie zadziałało przy żadnej konfiguracji fuse. A z tym spróbowałeś? while(1) { LCDclr(); LCDstring(name,5); LCDsendChar(space); _delay_ms(1000); LCDclr(); LCDstring(website,5);...
linia 20 - deklaracja zmiennej "n" nie może być umieszczona w strukturze pętli for, najlepiej ją umieścić zaraz za main(), linia 29 - nie ma wartości logicznych true/false, zamiast tego można napisać while(1)
Poszukałem i znalazłem prosty programik w C dla AT90S8515 z kwarcem 8 MHz mrugający diodą LED. Dokonałem małej zmiany (częstotliwość kwarcu), kompilowałem go za pomocą avr-gcc pod linuksem, zaprogramowałem mikrokontroler ATmega8 za pomocą uisp i STK200 i... działa z wewnętrznym oscylatorem 1 MHz. Dioda LED jest przez rezystor podpięta anodą do +5V i...
nie lepiej zamiast tego "goto" dać zapętlany kod do tego while? ad2. While(1); samo w sobie jest pętlą nieskończonąi pustą dlatego jak program dojdzie do tego miejsca to tak jakby wykonuje nic az sie procek nie spali :P Jednak do tej pętli mozesz sobie coś wrzucić (jak zrobiłem poniżej) i wtedy mkontroler będzie to wykonywał. To co jest przed tą pętlą...
poprawiłem i kropek nie ma ale za to zniknął pierwszy z zapisanych łańcuchów void SaveString(char offset, unsigned char * tekst) { char i=0; for( i=0; i<=strlen(tekst); i++) EEPROM_write(offset+i, tekst[i]); EEPROM_write(i, 0); } Działa przez wywołanie: K(OpenString(30,temp,12)); nie działa...
Tak czy siak - jaki problem napisac funkcję: void delay(int x) { while(x--) delay_us(1); } ? 4\/3!!
A ja nie rozumiem dlaczego zmieniasz szybkość transmisji w rejestrze TWBR. Najpierw jest 0x48 a na końcu inicjalizacji 0x0C. A w funkcji inicjalizującej jest pętla while- nie widziałem nigdy przedtem czegoś takiego.
Jednak Zumek miał rację - to było to Jeszcze przed while{ } trzeba było wsadzić sei(); i działa Dziękuję wszystkim, teraz mogę się spokojnie położyć spać
1) kompilator wyrzuca jakieś błędy? aha, zdecyduj sie w jakiej notacji piszesz ;) nastaw sie na szesnastkowy Program po wykonaniu sie musi zwrócić wartość do systemu Wink (oczywiście tu go nie ma, ale to taki archaizm ze starych czasów Wink ) widać że programujesz w C, ale dla kompilatora AVR-GCC to return nie jest ważne, bo program nie powinien dojść...
Witam, Nie działą dalej:( The 1-Wire bus must be switched to the strong pullup within 10μs (max) after a Convert T [44h] or Copy Scratchpad [48h] command is issued, and the bus must be held high by the pullup for the duration of the conversion (tCONV) or data transfer (tWR = 10ms). No other activity can take...
Program tylko raz zapali diodę i raz ją zgasi. Być może robi to za szybko. Umieść procedurę sterującą diodą wewnątrz pętli while(1) i będzie mrugać :)
dzień dobroci. #include "konfig.h" // sugerowalbym nazwy typu "config.h" volatile char Temp; // skoro odbierasz znak, to po co komu 16-bitow? ISR(USART_RXC_vect) { //Temp=0; // zbedne Temp=UDR; if (Temp=='1') // przynajmniej wiadomo o co chodzi { UDR=Temp; //echo tego co wysyla } } int main(void)...
AVR GCC z pakietu WinAVR 20080610 jest bardzo agresywny i przy optymalizacji często nieskończona pętla while(1) zostaje przekształcona w RJMP +0 i... reszta programu jest pomijana! Doświadczyłem tego sam, jak i parę innych osób - nawet na tym fourm. Przykład skrócony (z forum): int main(void) { unsigned int sect; timer_init(); SPIinit();...
Jak się okazuje to ATMega 128 i wszystkie wyższe z tej serii mają całkowicie ine definicje większości rejestrów i ustawień bitowych, trzeba dobrze poczytać noty katalogowe, niestety angielskie i to techniczne, więc podstawowa znajomość angielskiego nic nie da,dobrze z tłumaczeniem takich tekstów daje sobie radę Translator 2 firmy KOMPAS, oczywiście...
Proponuje sprawdzic cos takiego: #include <avr/io.h> #include <inttypes.h> //**************PROGRAM GŁÓWNY*******************// int main(void) { uint8_t i=255; DDRD |= 0x01; PORTD |= 0x01; for(i=0;i=20;i++); PORTD &= ~0x01; while(1); }
Niby prosty kod, zainicjowanie wyświetlacza, mazanie po nim i nic więcej. Wszystko działa lecz jeśli do projektu dodam linie #include <stdlib.h> to wszystko się wysypuje. AVRStudio się zawiesza podczas kompilowania. Gdzie jest błąd :?: Czy używanie bibliotek wymaga jakiegoś specjalnego ustawienia AVRStudio. #include <avr/io.h> #include "lcd.h"...
W WinAVR wyglądałoby to tak: #include <avr\io.h> //plik nagłówkowy(zawiera m. in. nazwy rejestrów) int main(void) { DDRA=0b00000001; // lub (wygodniej) DDRA=0x01; lub DDRA=1; PORTA=255; // lub PORTA=0xff; lub PORTA=0b11111111; while(1) //pętla nieskończona { if (bit_is_clear(PINA,0)) //jeśli...
Wyłącz optymalizację lub zmień jej poziom na mniejszy. Ostatnio dość często widzę, że AVR GCC nie bardzo radzi sobie z takimi pętlami przy optymalizacji. Sam walczyłem z programem, który to co było po while(1) kompilator totalnie obcinał. Jakiś błąd w GCC musi być. Dopiero wyłączenie optymalizacji pomogło.
Witam. Mam pewien problem żeby na tym mikrokontrolerze zrobić czasomierz. Gdy napisze w bascomie działa ok, ale jak w WinAVR to już nie. #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> SIGNAL (SIG_OVERFLOW0) { PORTD = ~PORTD; } int main(void){ DDRD=0xff; PORTD=0xff; TIMSK = _BV(TOIE0);...
Zmienne globalne i obsługa przerwania INT0: unsigned char n=0,numer=0,komenda=0,kod=0; bit zdalna_komenda; void IR_INT0 (void) interrupt 0 { if(n) { TL0=TH0=0; TR0=1; while (int0==0); TR0=0; if (TH0 > 5) { n=0; komenda=numer=kod=0; } else { if (TH0>2 || (TH0==2 && TL0 >...
Witam, Chce uruchomić przerwanie PCINT0, z tego, co zrozumiałem, z datasheeta to muszę ustawić odpowiedni bit w rejestrze PCMSK, bit PCIE w GIMSK. Nie znalazłem żadnej konfiguracji przerwań PCINT, ale z tego, co wyczytałem to one działają tylko na zmianę stanu na odpowiednim pinie. Do pinu z PCINT0 podłączyłem przycisk zwierany do masy. Jednak, gdy...
Dla porównania jak to u mnie wyglada (WinAvr) int main(void) { DDRC=255; 6c:8f ef ldir24, 0xFF; 255 6e:84 bb out0x14, r24; 20 while(1) { PORTC=255; 70:e5 e3 ldir30, 0x35; 53 72:f0 e0 ldir31, 0x00; 0 74:4f ef ldir20, 0xFF; 255 milliseconds can be achieved. */ void _delay_loop_2(uint16_t __count) {...
1. Instalujesz AVR Studio v. 4.12 (najnowszą) - zrób to najlepiej na standardowych ścieżkach 2. Instalujesz WinAVR - również standardowo (c:\winavr). Uruchom AVR Studio - powinieneś mieć do wyboru AVR GCC, wybierz uP jaki chcesz używać, wklej poniższy kod i ... projekt powinien dać się skompilować. #include <avr/io.h> #define bit_set(v,m)...
do tego można jeszcze zamiast main () { while (1) { char i; i=0x00; i=16; } wpisać int main () - nie będzie wyrzucał Warninga.
no mozna... o ile funkcje dzialaja ;) robie tak : while(eeprom_is_ready()); eeprom_write_byte(5,0x41); while(eeprom_is_ready()); unsigned char gg; gg=eeprom_read_byte(5); te while to tylko i wylacznie dla pewnosci bo za chiny nie chce dzialac... nadal nic... :( da sie to jakos obejsc w winavr.. nie wierze ze nie da sie tego obsluzyc... kompiluje w avr-gcc
Brrr, Basic. ;) Przerzuć się na C lub asemblera. Nowe AVRStudio można zintegrować z WinGCC i działa to bez zarzutów. A w C deklarujesz sobie od razu, czy masz zmienną całkowitą (char, int), czy zmiennoprzecinkową (float) i o dziwo artytmetyka zmiennoprzecinkowa nie zajmuje ogromnych ilości flasha. :) Ciekawie prawisz , tylko wytłumacz mi dlaczego ten...
W programie na końcu mam pętle nieskończoną: while(1) { pressed[0] = 0; pressed[1] = 0; } Oczywiście wartość 1 wstawiam w przerwaniu. Niestety kompilator pzrerabia ten kawałek kodu na: RJMP PC-0x0000 próbowałem użyc for(;;) i do{} while(1) z tym samym skutkiem. Jak zmusić kompilator, żeby skompilował instrukcje zawarte...
Tak, może być ustawione w makefile. Należy wybrać pomiędzy 1-3, 0 - to brak optymalizacji kodu. Tak jako ciekawostka, kod który miga diodą można skrócić do: while(1) { PORTB ^= _BV(PB2); for(i=0;i<50;i++) _delay_ms(20); }
Witam, Zacząłem programować w WinAVR i mam pewien problem. Napisałem takio oto programik: #include "avr/io.h" int main (void) { DDRD=0x05; while(1) { PORTD=0x01; if (bit_is_clear(PIND,1)) PORTD=0x04; } return(0); } Miał on za zadanie po naciśnięciu zmienić świecącego się leda, lecz...
Nie piszę w C, ale czy nie powinno być tak? define F_CPU1000000L #include <avr/io.h> #include <util/delay.h> int main(void) { DDRD = 0xFF; while(1) { PORTD = 0xFF; _delay_ms(500); PORTD = 0x00; _delay_ms(500); } return 0; }
Ja testowałem SPI na atmega16 i rzeczywiście jeśli SS jest wejsciem to powoduje to pewne problemy . Wystarczy podłączyć oscyloskop do układu i już transmisja znika. zrobiłem dla testu coś takiego(zapalanie i gaszenie diody led PD5 przy transmisji SPI ) : void SPI_MasterTransmit(char cData) { /* Start transmission */ SPDR = cData; /* Wait...
Gdybyś dokładnie przytoczył komunikat AVRStudio , to było by łatwiej. Czy widzisz coś podobnego :?: "AVR Simulator Please wait while configuring simulator... AVR Simulator ATmega8 Configured OK Loaded objectfile: C:\WinAVR\Przyklady\Project.elf AVR Simulator JMP: Unsupported instruction on this device, use RJMP AVR Simulator JMP:...
Nie mogę sobie poradzić z przerwaniami, nie widzę w którym miejscu zrobiłem błąd. Kompilator czepia się linii ISR(INT0_vect) i ISR(INT1_vect) [syntax=c] * main.c * * * generator impulsów bramkowych * * PB2, PB3, PB4 przyspieszenie impulsu * *PD6 wejście załączjące zgrzewanie * *PD0 steruje tyrystorami * *INT0 i INT1 impulsy 0 sieci * * Created on: 07-09-2012...
Tak dodałem pliki nagłówkowe również do katalogu z projektem i nie pomogło ;/ o co chodzi z tym KODem ? z linkera #include "lcd.h" int main() { int i=0; lcd_init(); while(1) { i = (i+1)%10; lcd_home(); lcd_string2("Hello World!",i); for (int i=0;i<10;i++) _auxDelay(1000000);...
Więc aby nie "przerywać ramek" wystarczy sprawdzić czy poprzednia została w całości wysłana. PRZERWANIE { if (cośtam) ustaw_flage_Y } MAIN { while { FUNKCJAx //wysyła znaki przez uart. if (flaga_Y_ustawiona && !flaga.ramka_wyslana) { FUNKCJAx; reset_flagi_Y;flaga.ramka_wyslana = 1; } } }
Mam pytanie. Nie znam dokładnie winavr, ale umieszcza on łańcuch tekstowy w zmiennych typu data, zamiast w kodzie programu. Przykładowy program: #include <stdio.h> void main (void) { while (1) { printf("aaaaaaaaaaaa"); printf("bbbbbbbbbb"); printf("cccccccccccccc"); } } //------------ Size after: demo.elf : section size addr .text 2614 0 .data...
tu masz cały kodzik: ////////////////////////////////////////... // WyswietlaczLCD.c // // Autor: Ravender Kompilator: WinAVR ////////////////////////////////////////... #include <avr/io.h> #include <inttypes.h> #include <util/delay.h> #include <hd44780.c> int main(void) { LCD_Initalize(); LCD_Clear();...
W końcu jakieś konkrety! Funkcja pisz_tekst() wygląda następująco, a piszę w C pod WinAVR. void pisz_tekst(prog_char* tekst) { char zn; while(0 != (zn = pgm_read_byte(tekst++))) { if(zn == CR) // czy znak nowej linii { wiersz==1?wiersz=0:++wiersz; kolumna = 0; lcd_xy(wiersz,kolumna);...
Kod programu jest do granic możliwości prosty :D #include <avr/io.h> #include <util/delay.h> int main() { while(1) { PORTA=0xFF; }; } A pojawia się błąd: C:/WinAVR/avr/include/util/delay.h:154:1... invalid suffix "ULUL" on integer constant C:/WinAVR/avr/include/util/delay.h:179:1... invalid suffix "ULUL" on integer constant ../testowy_c.c:8:...
#include <avr/io.h> void czekaj(unsigned char pt) { unsigned char a; for(;pt>0;pt--) { for(a=255;a!=0;a--); } } int main(void) { DDRB=0x03; DDRD=0x00; while(1) { if(PIND==0x00) { PORTB=0x01; czekaj(255); PORTB=0x02; czekaj(255); } else PORTB=0x03; } } // pod WinAvr - powinno zadziałać
Atmega88 nie ma takich w ogole rejestrow: TIMSK, TCCR0! Ten kod jest poprawny. #include <avr/io.h> #include <avr/interrupt.h> #define TIMER0_INIT 175 char i; // procedura obsługi przerwania od timera TC0 SIGNAL (SIG_OVERFLOW0) { TCNT0 = TIMER0_INIT; // załadowanie do licznika wartosci poczštkowej PORTB ^= (1<<PB1);...
Hej.... Ja niestety mam ten sam problem, ale nic z tego co napisałeś nie dało rady. U mnie wyskakuje komunikat: Unexpected error in file: .\toolsmenager.cpp, line:270, version 2.0.7.667. XML Paraser Exception loading Scheme Tools: Exception while parsing XML. Please e-mail this information to ss(at)pnotepad.org. Komunikat ten mi się wyświetla przy...
Witaj. Dziękuję i pytam się dalej. Po kolei. Ściągnąłem to co mnie podałes, zainstalowałem, napisałem pierwszyprogram(dla pewności jest to program książkowy), wklepałem. Nazwę programu mogę nadać dowolną?Musze tutaj zapodać jakieś rozszerzenie (chodzi mnie tutaj o typ, domyślnie jest coś takiego: AII MCS-51 known files). Program , który napisałem nie...
Witam, mam następujący problem, mam zainstalowane WINAVR, AVR Studio 4... Teraz pisze (czyt, przeklejam) jakis najprosztszy program: #include <io.h> #include <iomega8.h> int main(void) { outp(0xff,DDRB); while(1) { outp(0xff,PORTB); outp(0x00,PORTB); } } I robie compile. I dowiaduję się, że nie ma plików io.h iomega8.h:/ OCB?:>
Kompilator z pakiety WinAVR, kod: [syntax=c] static uint8_t PROGMEM DIGITS[11]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xBF}; const uint8_t DP=0x80; void ShowOnLED(uint8_t val) { uint8_t tmp=0xFF; if((val & 0x7F)<11) tmp=pgm_read_byte(&DIGITS[val & 0x7F]); if((val & DP)==1) tmp&=~(DP); LEDPORT=tmp; } #define...
Co do zasilania to jest przyłaczone (no chyba że masa na nóżce 31 tez musi być - to jej nie mam przyłączonej). Poza tym fusy odczytuje: Atmel AVR ATmega16 is found. Fuse Low Byte = 0xe3 Fuse High Byte = 0x99 Fuse Extended Byte = 0xff Calibration Byte = 0xb5 -- Read Only Lock Bits = 0xff BLB12 -> 1 BLB11 -> 1 BLB02 -> 1 BLB01 -> 1 LB2 ->...
Ja mam u siebie troche inaczej. Ale najlepiej skorzystać z datasheeta bezczelnie kopiując kod. Po co Ci to L po określeniu taktowania? Piszesz w WinAVR czy czymś innym? Init: #define FOSC 8000000// Clock Speed #define BAUD_GPS 9600 #define MYUBRR_GPS FOSC/16/BAUD_GPS-1 ////////////////////////////////////////... void USART_Init( unsigned...
Witam. Mam zainstalowane winavr(WinAVR-20070525-install.exe) oraz avr studio 4.12 z SP. Program ma mw taka postac: #include <avr/io.h> #include <avr/interrupt.h> ISR (...) { } ISR (...) { } int main() { sei(); while(1) {} } i przy kompilacji otrzymuje błąd: ../mikro.c:62: error: redefinition of 'ISR' ../mikro.c:57: error: previous definition...
chciałem odmierzac odciniki czasu na T1 i nie wiem jak odczytac wartosc licznika. dla timera 0 znalazłem przykład : state = inb(TIFR) & _BV(TOV0); while (state != _BV(TOV0)); niestety inb(TIFR) ... nie działa dla T1 w "iomacros.h" jest makro inw(TIFR)... i też lipa. pomimo ,że używam tego nagłówka #include <compat/deprecated.h>....
Witam Napisałem program na ATmega32 i brakło mi portów więc zrobiłem układ z ATmega128. Po przerobienu programu i wgraniu go nie było żadnego odzewu ze strony procka (atmega128). nie działa nawet program: #include <C:\Program files\WinAVR\avr\include\avr\io.h> #include <C:\Program files\WinAVR\avr\include\avr\delay.h> #include <C:\Program...
Witam Mam problem bo nie mogę nakłonić attiny2313 do zapisu a następnie odczytu wartości z eepromu. Próbuję zapisać wartość liczba_LED do eepromu a następnie ją odczytać a wyświetlacz 7-LED zobrazuje to. Co robię nie tak? Z góry dziękuję za pomoc. #define F_CPU 4000000L #include <avr/io.h> #include <util/delay.h> int main(void) {...
Witam. Zainstalowałem sobie pakiet WinAvr na laptopie z Windows 7 64bit. Posiadam układ Atmega8 i programator USBasp. Mam problem z kompilacją kodu do pliku .hex . Robię wszystko tak jak jest zapisane w #define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> int main(void) { DDRB |= _BV(0)|_BV(1);...
Witam Próbuję się dowiedzieć jak używać przerwań, ale marnie mi to idzie. Nigdzie nie mogę znaleźć informacji tłumaczące od A do Z co i jak i przez to mam bałagan w głowie. Znalazłem pewien kod w necie i paru rzeczy nie rozumiem: 1. W "SIGNAL (SIG_OVERFLOW0)" ustawiona jest wartość początkowa więc dlaczego kolejny raz jest to wykonane w "int main(void)-->TCNT0...
#include <avr/io.h> //wykorzystanie timera #define tau0 6; int main (void) { unsigned char licznik=2; DDRB = 0x01; TCNT0=tau0; TCCR0=2; while(1) { while(( inp(TIFR) &0x02)!=0x02); TCNT0=tau0; if(--licznik==0) { PORTB= ~PORTB; licznik=2; } TIFR=1<<TOV0; } } Zarówno w tym przykładzie, jak i w innym, w którym chciałem zastosować te funkcję,...
Witam, mam taki problem jeśli definiuje funkcje GetKey pliku KPD.c nie mam do niej dostępu mimo jej deklaracji KPD.h oraz dołączeniu pliku KPD.c. Do innych funkcji w tym pliku mam dostęp np. KPD_GetKey. Próbowałem definiować jako extern ale nic nie pomogło. Problem rozwiązuje zdefiniowanie jej w pliku main.c jednakże, chciałbym ją mieć w pliku KPD.c....
Witam Uczę się dopiero programować mikrokontrolerów. Naczytałem się sporo tutriali i przejrzałem od tygodnia sporo topiców na forum. Niestety muszę zacząć od nauki na atmega128 przez projekt na studiach :| Mój program jest bardziej rozbudowany niż ten teraz ale nie mogę sobie poradzić z symulacją nawet najprostszego. Robię najprostszy program żeby symulować...
Witam. Czytam ten kurs, co doradził p_zag i mam problem, ponieważ nie mogę skompilować programu, bo wyskakuje mi błąd: > "make.exe" all make.exe: *** No rule to make target `all'. Stop. > Process Exit Code: 2 > Time Taken: 00:01 Co mam zrobić, żeby mi zadziałało :?: Kod programu: /* "led.c" - programik do...
Masz racje Balu oczywiście odebrane dane są w UDR ale uprzednio trzeba zainicjalizować uarta. Co do przerwań to spokojnie, na razie chce porządnie odebrać i wysłać. Co do funkcji chodzi o cos takiego? char odbierz (void) { UART_init(); while(!( UCSRA & _BV(RXC) )); odebrane = UDR; return UDR; } Powiedzcie...
albo jestem ślepy, i nie widzę tego w kodzie, ale ze stronki void USART_vSendByte(uint8_t u8Data) { // Wait if a byte is being transmitted while((UCSRA&(1<<U... == 0); // Transmit data UDR = u8Data; } void Send_Packet(uint8_t addr, uint8_t cmd) { USART_vSendByte(SYNC);//send...
Witam, mam problem podczas pisania biblioteki dla wyświetlacza LCD - przepisywałem z tzw. blue book'a Pana Mirosława Kardasia, a mianowicie nie działaja mi makra ułatwiające dostęp do DDR, PIN oraz PORT kod programu (żeby pokazać, że nie działa skrócony do samego problemu): Error1expected identifier or '(' before 'volatile' Error2expected ')' before...
Teraz zrobiłem tak: int main(void) { DDRC = 0xFF; PORTC = 0x00; DDRB = 0xFF; PORTB = 0x00; while(1) { } } Sytuacja bez zmian, cały czas PB0 i PB1 są w stanie wysokim. Bibliotek nie edytowałem. Wczoraj instalowałem eclipse i winavr. fotki: http://obrazki.elektroda.pl/2358368900_1... http://obrazki.elektroda.pl/9215872300_1...
Dziękuję za sugestie. Dziwna sprawa... wspolczynniki_temp[0] = (uint32_t)123<<(12-dok... {wyswietl_liczbe(abs(wspolc... daje mi 123 wyswietl_liczbe wyświetla liczbe na wyświetlaczu jak wskazuje nazwa :) natomiast wspolczynniki_temp[0]...
Witam. Mam na 100% blad obliczania czasu. Kozystam z jakiejs blednej funkcji ktora zaczyna dzalac poprawnie po przekroczeniu 40us :( Init dzala bo tam czasy sa wieksze niz 40!! ( ladna lipa ) Moze mi ktos napisac jakas prosta funkcje do precyzyjnego odmiezania 1 ( 5 ) us. ( kozystam z kwarcu 7372800Hz kolejne pytanie to ile cykli zegarowych zajmuje...
Witam Mam problem z winAvr. Podczas próby kompilacji program zwraca mi błąd: > "make.exe" all AllocationBase 0x0, BaseAddress 0x71590000, RegionSize 0x170000, State 0x10000 C:\WinAVR-20070525\utils\bin\sh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 487 AllocationBase 0x0, BaseAddress 0x71590000, RegionSize 0x170000, State 0x10000...
Witam Siedzę sobie i walczę o uruchomienie zegara RTC PCF8563 z XMEGĄ 64A3. Pogooglalem trochę i napisałem kawałek softu do obsługi TWI. Nie wiem co jest z nim nie tak, bo dopiero przesiadam się z ATMEGA na ATXMEGA, a w ATMEGA obsługa TWI wyglądała nieco inaczej. Układ PCF 8563 z adresem 0xA0, zasilanie 3.3V, PullUpy 4k7 - wszystko zmontowane na płytce...
no tak powinno być while(1) a więc... Program który napisałem poniżej nie działa na ATmega128 (przy powrocie z podprogramu leci gdzieś dalej w kierunku końca pamięci programu) NATOMIAST ten sam program uruchomiony na ATmega 32 działa POPRAWNIE! Ma ktoś jakiś pomysł? Czy ATmega 128 potrzebuje jakiegoś specjalnego traktowania? Pozdrawiam Artur PROGRAM:...
Witajcie, Mam problem ze sterowaniem serwomechanizmu NewPower XL-9 z poziomu Atmegi 1284. Kod wydaje się być OK. Serwo non-stop kieruje się w jedną stronę, do oporu. Nawet z różnymi wartościami OCR1A, serwo wykonuje ten sam ruch. Co mam źle ? Kod to w sumie gotowiec z internetu, gdyż poprzednie, własne kody także nie działały :/ [syntax=cpp]#define...
Pojawil mi sie nowy problem. Czasem program wysypywal ise przy wczytywaniu projektu, wiec postanowilem go przeinstalowac. Niestety ponownej po instalacji wyskakuje mi blad: "An error occurred while retreiving the devices supported by the simulator" Instalowalem kilka razy, rozne wersje. Ciagle ten blad. Wczesniej go nie bylo. Co zle robie? Pozdrawiam
diody są w porządku bo już sporo programów na nich zrobiłem w tej konfiduracji a oto kod: [syntax=c]#define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> unsigned int pomiar; // Zmienna do przechowywania wyniku pomiaru void Inicjalizacja(void) { DDRB=0xff; //diody pod PB1, PB2, PB3 PORTB|=(1<<PB1)|(1<<PB2)|(1&...
Witam serdecznie. Borykam się z problemem sterowania serwem (TGe9).Atmega8, język C. Pracuję na WinAVR. W makefile jak i podczas kompilacji oprogramowanie mówi, że FCPU wynosi 1MGhz, czyli ICR1 jest wyliczone prawidłowo. Problem polega na tym iż serwo bardzo skokowo idzie do zadanej pozycji. Powolutku małymi szarpnięciami. Na początku myślałem, że mam...
Witam, Otóż mam dziwny problem. Pewna procedura wysyła coś na UART. robi to prawidłowo ale to co jest wysyłane trafia także na pewien obszar pamięci (na tablice przechowującą string). Czy ktoś ma pojęcie dlaczego tak się dzieje skoro prockowi nie brakuje zasobów (użyte do tej pory 25% pamięci programu i 70% pamięci danych). Tak wygląda procedura obsługująca...
Witam, mam pytanie odnośnie optymalizacji wielkości kodu. Więc mamy sobie jakiś programik : #include <avr/io.h> uint8_t impulsy1; uint8_t impulsy; float obliczenie; int main(void) { DDRB=0xFF; PORTB=0xFF; DDRB = 0x00; while(1) { impulsy=0; impulsy1=0; while(impulsy!=255) { if(bit_is_clear(PINB,PB0)...
witam. napisalem ponizej program sluzacy do sterowania do zapalania kolejno diod podlaczonych do portu PB atmegi16, jednak nie dziala on jak nalezy. Nie wiem czemu program mimo ze jest w nieskonczonej petli while, wykonuje sie tylko jeden raz, a chcialbym zeby program dziala caly czas. Ponizej jest kod programu. #include <c:\elektronika\mikrokontrolery\winav...
witam Podczas debugowania przy pierwszym wykonaniu pętli while nie odświeża stanu rejestrów chodzi o PORTC zaznaczony na czerwono. Problem znika gdy przejdzie jeden raz pętlę While wtedy zaczyna się zmieniać stan portu PORTC. Niżej załączam listing programu i zrzut z ekranu. Co może być przyczyną ????? Avr studio wersja 4.18 build 716 procek: ATMega16A...
Witam Niedawno był ten problem poruszany - nie ma fopen w WinAVR Na podstawie manuala zastąp ją: 22.9.3.3 FILE* fdevopen (int(*)(char, FILE *) put, int(*)(FILE *) get) This function is a replacement for fopen(). btw: swoją drogą zastanawiam się teraz nad sensem wykorzystania tej wysokopoziomowej obsługi Uarta. Powiązanie strumienia będzie wyglądało...
właśnie jak kupowałem te części - jakiś rok temu, to nie wiedziałem jak to zaprogramuje, poprostu je kupiłem, teraz gdy już umiem trochę programować, wiem że niepotrzebnie je kupowałem. No nic. poleżą sobie, jak nie w półce to w koszu :) Dodano po 5 Jeszcze mam jedno pytanie. Czy avr gcc dołącza pliki te w dyrektywie include do kodu programu ? nie jest...
Build started 6.4.2014 at 00:25:04 avr-gcc -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Proba_10.o -MF dep/Proba_10.o.d -c ../Proba_10.c avr-gcc -mmcu=atmega16 -Wl,-Map=Proba_10.map Proba_10.o -o Proba_10.elf avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature...
Witam, próbuje skorzystać z pamięci programu do przechowywania tablicy stałych. Środowisko: WinAVR-20090313, VMLAB 3.14, atmega88. Fragment mojego kodu: ... #include <avr/pgmspace.h> //obsługa pamięci programu ... uint8_t kod[] PROGMEM = {2,3,6,2,1,0xff}; ... int main(void) { ... while(1) { .... kod_element...
Witam Nie wiem dlaczego program zlicza mimo, że przycisk nie został wciśnięty. Zaraz po uruchomieniu chwile wyświetlane jest 0 a następnie program sam zaczyna liczyć. Co robię nie tak? #define F_CPU 4000000L #include <avr/io.h> #include <util/delay.h> int8_t i,m, wysw,jednostki,dziesiatki; unsigned char liczba_LED[10]={192,249,164...
Witam; Korzystając ze strony http://radzio.dxp.pl/ napisałem (w WinAVR) procedurki obsługujące zapis i odczyt danych z zewnętrznej pamięci eeprom 24c32 po I2C. Problem w tym że nie działają.:( Tzn zlokalizowałem problem ale nie wiem jak się go pozbyć. Oto listing programu: twiread a mianowicie w miejscu: while (!(TWCR & (1<<TWINT))); program...
Ja mam obsługę uart w ten sposób void initrs232(void) { UCSRC=(1<<URSEL) | (1<<UPM1) | (1<<UCSZ1) | (1<<UCSZ0); // UBRRL=51; // 51prędkość 9600 dla 8MHz UCSRB=(1<<RXEN) | (1<<TXEN); //(1<<RXCIE) | sei(); } void nadajznak(char...
Należy zapamiętać w pamięci nieulotnej (EEPROM) informację o tym, że alarm został wyzwolony. Najprostszy kod na arduino (bez problemu do przerobienia na "goły" WinAVR). [syntax=c]#include <avr/io.h> #include <avr/eeprom.h> unsigned char EEPROM_read(unsigned char ucAddress) { while(EECR & (1<<EEPE)); EEAR = ucAddress; EECR |= (1<<EERE);...
Program moze wygladac np tak: #include <io.h> #include <lcd.h> #include <math.h> #include<stdlib.h> int main(void) { double a,b; unsigned char *str,wsk Pomocy co robic :cry:
Nawet niekoniecznie początkujący. Ja się kiedyś nabrałem na coś mniej więcej takiego (przykład dotyczy innego problemu, ale pokazuje, jak w C trzeba uważać ;) ): [syntax=C] counter = 0; // komentarz while ( counter < MAX ); { // cośtam ... counter++; } [/syntax] Ja patrzyłem, kolega patrzył.. Dlaczego ta pętla wykonuje się tylko raz? Dopiero chyba...
dodałem static i nic nie pomaga a to kod programu: // ****************************************... // Project: // Author: // Module description: // ****************************************... #include <avr\io.h> // Most basic include files #include <avr\interrupt.h> // Add the necessary ones #include...
Napisałem kawałek kodu na inicjację interfejsu UART i nie mogę skompilować. Gdzie jest błąd? Kompiluję w WinAVR a mój procek to mega8535 #include <avr/io.h> #define F_CPU11059200ul #define UART_BAUD9600ul #define UART_CONST(F_CPU/(16ul*UART_BAUD... void init(void) { DDRA=0xFF; DDRC=0xFF; outp((unsigned char)UART_CONST,...
włączony Dodano po 14 poprawki + moja propozycja czasów strobe http://winavr.scienceprog.com/example-av... SKYPE trzeba było od razu uruchomić, to zaoszczędzilibyśmy wiele czasu :) Możliwość obserwowania wyniku na odległość za pomocą kamery - takie czasy ... Pięknie działa, a to jeszcze nie koniec ...
Witam, Już kilka dni nie mogę rozwiązać problemu z wyświetlaczem i tym kontrolerem. Wyświetlacz i sterowanie jest 4-bitowe. Wyświetlacz to WC1602A0, czyli kompatybilny z HD44780 2 rzędy po 16 znaków. uCdo testowania to Atmega16, choć docelowo będzie pracował z Atmega32. W każdym razie połączenia na schemacie wydają sie być w porządku, dla pewności kilkukrotnie...
Witam, Próbuję się "przesiąść" z Bascoma na C dla AVR. W prostym programie próbuję odczytać stan wejść PA0, PA1. Przycisk zwiera do masy. Dlaczego w symulacji AVR Studio funkcja if od razu jest wykonywana?: if (!(PINA & 0x01)) Czy POTRA0, POTRA1, oraz PINA0, PINA1 nie powinny być ustawione po tych rozkazach? /*PA0, PA0, linie wejscia...
Witam! Mam pewien problem. Mianowicie, zadeklarowałem sobie strukturę w pamięci programu oraz zainicjowałem ją: typedef struct stringg { uint8_t screen_cnt; // ilość ekranów char napis[]; // tekst do wyświetlania }string_struct PROGMEM; string_struct strr = {1, "avc"}; oraz procedurę piszącą na moim wyświetlaczu:...
http://obrazki.elektroda.pl/8571388900_1... http://obrazki.elektroda.pl/7745576100_1... #include <avr/io.h> void main(void) { DDRB = 0b00000001; PORTB = 0b00000001; while(1) { } } Zależy mi na banalnym zapaleniu diody żeby wiedziec że wszystko jest ok. Proszę też sprawdzić czy...
Problem, w zasadzie coś co jest już wałkowane na forum wielokrotnie, ale mimo przeczytania kilku wątków nie znalazłem odpowiedzi. Otóż potrzebuję zrobić odbiór poprzez uart. Korzystam z Atmegi 32(w zestawie ewaluacyjnym, zewnętrzny kwarc) i środowiska WinAvr. Wysyłanie z mikrokontrolera udało mi się uruchomić, odbioru przez uC nie do końca. Komunikacja...
while atmel petla while timeout while
montaż moduł bluetooth ustawienia ekran laptop 800x600 schemat sterownika almera
Najlepsza jakość dźwięku w kodeku do kamery IP TS10 24-pin ekran – opis pinów, funkcje kabli, MIPI-DSI, VLED, nRESET, TE, kompatybilność