Skocz do zawartości

Imperatorek

Użytkownicy
  • Zawartość

    9
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O Imperatorek

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Masz rację, nota przewiduje kondensator z zakresu 12-22 pF. Niestety nie mam pod ręką nic z tego przedziału oprócz wspomnianych 22 pF wiec na chwilę obecną nie mogę tego sprawdzić.
  2. Na pewno wszystko będę jeszcze dokładnie sprawdzał Co do kondensatorów to jakie wartości powinienem dobrać zamiast obecnych (tak orientacyjnie)? 22 pF zaleca nota katalogowa mikrokontrolera i tym się kierowałem przy ich doborze.
  3. A więc tak -- kwarc jest wsadzony zaraz obok nóżek mikrokontrolera, zaraz za tym (następne oczko płytki) kondensatory a te bezpośrednio do linii masy na płytce stykowej. Zbyt długie przewody powodują niepoprawną pracę mikrokontrolera, ale czy moje podpięcie już wykracza poza bezpieczne granice?
  4. Cześć wszystkim. Mam problem z rezonatorem kwarcowym na płytce stykowej -- w momencie podpięcia go przez kondensatory 22 pF do masy, urządzenie nie jest rozpoznawane i avrdude wyświetla mi błąd (Mega1284). Jak tylko odłączę go od masy to urządzenie da się normalnie zaprogramować choć nie jestem pewien czy wszystko działa, ponieważ nie mogę przeprowadzić poprawnej transmisji UART (błędy w ramce danych, program jest dobry bo przez chwilę działał na ATMedze328p -- sprawdzane analizatorem logicznym.) Nie zamieszczam schematu podłączenia, ponieważ jest dobre -- na płytce lutowanej w której pracował mikrokontroler wszystko działa przy takim samym podłączeniu (kwarc połączony z masą). Zastanawia mnie też czy problemem może być sam kwarc. Zawsze używałem takich z oznaczeniem np. 16.000 itp. natomiast ten którego używam obecnie ma oznaczenie R160LEB8w Z góry dzięki za odpowiedzi. PS: Odpowiedź avrdude przy poprawnej transmisji. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.01s avrdude: Device signature = 0x1e9706 (probably m1284) avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "asdf1.hex" avrdude: writing flash (184 bytes): Writing | ################################################## | 100% 0.08s avrdude: 184 bytes of flash written avrdude: verifying flash memory against asdf1.hex: avrdude: load data flash data from input file asdf1.hex: avrdude: input file asdf1.hex contains 184 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.08s avrdude: verifying ... avrdude: 184 bytes of flash verified avrdude: safemode: Fuses OK (E:FF, H:99, L:F7) avrdude done. Thank you. Kod programu: /*Przek dompilacją należy zdefinować wartości BAUD Rate */ #include <avr/io.h> #define BAUD 9600 #define MYUBRR F_CPU/16/BAUD-1 void UART_Init( unsigned int ubrr); void UART_Transmit(unsigned char data); int main(void) { char i = '5'; UART_Init(MYUBRR); UART_Transmit(i); while(1) ; return 0; } void UART_Init( unsigned int ubrr) { /*Set baud rate */ UBRR0H = (unsigned char)(ubrr>>8); UBRR0L = (unsigned char)ubrr; /*Enable receiver and transmitter */ UCSR0B = (1<<RXEN0)|(1<<TXEN0); /* Set frame format: 8data, 2stop bit */ UCSR0C = (1<<USBS0)|(3<<UCSZ00); } void UART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSR0A & (1<<UDRE0)) ) ; /* Put data into buffer, sends the data */ UDR0 = data; } Wynik z analizatora stanów -- BAUD ustawiony na 9600 tak jak w programie:
  5. Sam nie mogę uwierzyć, że tego dokładnie nie sprawdziłem. Myślałem, że jeśli przy uruchomieniu Code::Blocks wykrył kompilator avr-gcc to wszystkie ścieżki będą skonfigurowane. Jeszcze raz bardzo dziękuję Temat można zamknąć.
  6. Witam wszystkich. Programuję amatorsko mikrokontrolery AVR. Niedawno przesiadłem się także na Linuksa (Mint) i postanowiłem skonfigurować sobie Code::Blocks do programowania AVRów. Na Windowsie nie było z tym żadnego problemu, wszystkie programy poprawnie się kompilowały. Na Linuksie problem pojawia się, gdy chcę użyć opóźnień czasowych - _delay_ms i _delay_ns. Kompilator wyrzuca mi następujący błąd: -------------- Build: Release in 1 (compiler: GNU GCC Compiler for AVR)--------------- avr-gcc -Wall -mmcu=atmega328p -DF_CPU=1000000UL -Os -O -I/usr/include -c main.c -o obj/Release/main.o In file included from /usr/include/math.h:43:0, from /usr/lib/avr/include/util/delay.h:46, from main.c:5: /usr/include/bits/floatn.h:75:1: error: unknown machine mode ‘__TC__’ typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__))); ^ /usr/include/bits/floatn.h:87:9: error: unknown type name ‘__float128’ typedef __float128 _Float128; Kod jaki próbuję skompilować (chyba najprostszy z możliwych): #include <avr/io.h> #include <util/delay.h> int main(void) { DDRD = 0xff; // Insert code while(1); PORTD |= (1<<PD7); _delay_ms(1000); PORTD &= ~(1<<PD7); _delay_ms(1000); return 0; } Wersja AVR-GCC: 5.4.0 Google nie pomaga. Czy ktoś spotkał się z podobnym problemem? Z góry dziękuję za pomoc. Pozdrawiam
  7. deshipu piwo dla ciebie. Robiąc schemat zorientowałem się, że ATMega1284 ma ADC na porcie A a nie na porcie C jak ATMega328p, którą także posiadam i z którą cały czas pracowałem. Kod poprawiłem i wydaje mi się, że wszystko jest ok. Jeszcze raz wielkie dzięki
  8. Cześć ADC w mojej ATmedze1284 przejawia dziwne zachowanie. Chciałem uruchomić układ jak w przykładzie na stronie AVR ADC z tą zmianą, że zamiast przycisku pomiary są wykonywane w pętli. Schemat połączenia zgodny z linkiem powyżej. Wyniki pomiaru przekazuję dodatkowo na wyświetlacz. Początkowo używałem samego potencjometru (bez rezystora) a więc po osiągnięciu napięcia ~2,56 V wynik powinien wynieść 1023 natomiast wyniki na wyświetlaczu dochodzą do ~960 i dopiero po przekroczeniu tej granicy wartość podnosi się do 1023. Praca potencjometru po podłączeniu jego wyjścia do ADC jest bardzo nieliniowa (potencjometr liniowy 10k). Z kolei pomiary napięcia na potencjometrze odłączonym od ADC pokazują pracę liniową. Drugi problem to taki, że jeśli zrobię już ten dzielnik napięcia z potencjometrem żeby nie tracić na rozdzielczości to maksymalny wynik na wyświetlaczu wynosi 7. W tym przypadku także zmierzyłem napięcia po odłączeniu od ADC i zmienia się ono liniowo w zakresie 0-2,5 V. Trzeci problem to taki, że po zmianie napięcia referencyjnego z wewnętrznego 2,56 V na Vref=Avcc (nie robię wtedy dzielnika) to maksymalny wynik na wyświetlaczu to 35. Pytanie - błąd w kodzie czy upalony mikrokontroler? /* */ #include <avr/io.h> #include <avr/include/util/delay.h> #include <stdbool.h> #include <stdlib.h> #include "hd44780.h" #include "hd44780.c" int main(void) { DDRA = 0xFF; DDRB = 0xFF; DDRC = 0xFF; DDRD = 0xFF; DDRC &= ~(1<<PC0); //ADC0 MCUCR |= (1<<JTD); //wylaczenie JTAG MCUCR |= (1<<JTD); LCD_Initalize(); ADMUX |= (1<<REFS0)| (1<<REFS1); //wewnętrzne 2,56 V ADCSRA |= (1<<ADPS0) | (1<<ADPS1); //dzielnik zegara 8 - 1MHz/8 = 125000Hz ADCSRA |= (1<<ADEN); //uruchomienie ADC ADCSRA |= (1<<ADSC); //Pierwsa konwersja volatile uint16_t wynik; while(1) { while(ADCSRA & (1<<ADSC)) //czekam na zakonczenie konwersji {} wynik = ADC; char bufor[5]; itoa(wynik,bufor,10); //uzywane zamiennie z utoa LCD_WriteText(bufor); _delay_ms(30); LCD_Clear(); ADCSRA |= 1<<ADSC; //nowa konwersja } return 0; } __________ Komentarz dodany przez: Treker
  9. Cześć wszystkim. Od jakiegoś czasu bawię się AVR'ami i przy wyborze środowiska padło na Code Blocks'a. Skonfigurowałem go jak należy i zacząłem programowanie. Początkowo używałem ATMegi328p i w jej przypadku nie było żadnych problemów. Problemy pojawiły się gdy zaopatrzyłem się w ATmegę1284. Brakuje jej na liście mikrokontrolerów w kreatorze projektów AVR w Code Blocks. Gdy stworzę projekt bez wyboru jednostki to jak pewnie wszystkim wiadomo w konsoli pojawia się następujący błąd: missing device or architecture after '-mmcu=' Kompilator jakiego używam to AVR GCC w wersji 7.2, AVRDude w wersji 5.11.1 Czy ktoś zna jakiś sposób na obejście tego problemu? Z góry dziękuję za pomoc. [ Dodano: 06-01-2018, 20:30 ] Drugi dzień siedzę nad problemem a na rozwiązanie wpadłem pół godziny po założeniu tematu. Gdyby ktoś się spotkał z takim samym problemem: - klikamy zakładkę Project-> Build options - z listy po lewej wybieramy nazwę naszego projektu (nie Debug lub Release) - Wybieramy zakładkę Other compiler options i do linijki -mmcu= dopisujemy nazwę mikrokontrolera - w moim przypadku atmega1284 - przechodzimy do zakładki Linker settings - w okienku Other linker settings do linijki -mmcu= dopisujemy nazwę naszego mikrokontrolera - w moim przypadku atmega1284 U mnie jak na razie działa, dioda się zaświeciła. Czas sprawdzić, czy działają Timery. Mam nadzieję, że ktoś skorzysta na tym poście.
×
×
  • Utwórz nowe...