W powyższy sposób pozbywasz się wybranego wcześniej źródła napięcia referencyjnego. Ma to wyglądać tak Tam nie powinno być tego OR!
Kanał 1 zdecydowanie nie tak się wybiera: ADMUX = 0b0000111; To ci wybiera kanał 7, w dodatku wyłącza wewn. Vref i musisz podać zewnętrzne na końcówkę Vref. Kolejny błąd: pomiar=(ADCH&512)|ADCL; ADCH & 512 da ci zawsze zero, bo ADCH jest 8-bitowy. Powinno być pomiar=ADC; Kolejne problemy to zmienne d1 i d2. Są 15-bitowe (bo ze znakiem), jak je przemnożysz...
Najlepszy dokument po polsku o mega16 : www.pg.gda.pl/~zbczaja/pdf/atmega16mmr.p... Rejestr ADMUX związany jest z przetwornikiem A/D. I po ang : www.atmel.com/dyn/resources/prod_documen... Wiem że to nie wygląda zbyt dobrze takie rzucanie Tobie linków ale pierwszy pdf wyjaśni Tobie to lepiej niż ja. Dodano po 3 I przykład kodu z innej strony...
var = GETADC(channel [,offset]) Remarks Offset- An optional numeric variable of constant that specifies gain or mode. This option has effect on newer AVR micro’s only. The offset will be added by the channel value and inserted into the ADMUX register.
Witam! Chciałbym prosić o pomoc w zdiagnozowaniu problemu polegającego na tym, ze gdy uruchamiam podprogram odpowiedzialny za pomiar temp z LM35CZ cały program na procku staje. Wcześniej pisałem coś takiego na ATmega8 i tam działało wszystko idealnie. Na Atmega16 program przeniosłem niemal wprost z ATmega8 zmieniłem tylko wejścia na przetwornik bo te...
Nie wiem czy dobrze rozumie, że chcesz aby przetwornik przetwarzał napięcia z zakresu do 0 do 3V. Jeśli tak to wydaje mi się, ze powinieneś w rejestrze ADMUX ustawić bity REFS1=0, REFS0=0 , a do pinu Aref podłączyć zewnętrze źródło napięcia odniesienia 3V
Zrobiłem tak: volatile int kanal= ADMUX&0x03; if (kanal==0) //000 (2,1,0) { fMeasSensor[0]=(double) (uiLoByte | (ADCH << 8 )) / 1024 * VREF5; ADMUX = 0x01; } else if (kanal==1) //001 { fMeasSensor[1]=(double) (uiLoByte | (ADCH << 8 ))...
W zależności od ustawienia bitów ADPS w rejestrze ADCSRA otrzymasz częstotliwość taktowania przetwornika ADC. Powinna być 50-200kHz. Ponieważ podejrzewam że taktujesz zegarem 1MHz to powinieneś go podzielić na 8 i wtedy masz taktowanie ADC 125kHz. Pomiar ADC trwa normalnie 13 cykli czyli w Twoim przypadku 104us. Ale pierwszy pomiar (po przełączeniu...
Atmega8: [syntax=c] /* * ADC.c * * Created: 2014-07-30 16:03:19 * Author: Piotr Rzeszut */ #include "ADC.h" void ADC_init(void){ ADCSRA |= (1<<ADPS2)|(1<<ADPS1); //prescaler 64 - F_ADC=125kHz ADMUX |= (1<<REFS0); //reference voltage = AVCC ADCSRA |= (1<<ADEN); //enable ADC } uint16_t ADC_get(uint8_t ch){ //ustawienie kanału do...
Najlepiej podłącz mikrofon z analogowym filtrem dolnoprzepustowym, żeby wyłapywał perkusję (tzw. stopkę, najniższe brzmienie - nie wiem jak się to fachowo nazywa) i wtedy próbkuj ADC i wyłapuj skoki amplitudy. Tu masz kod obsługi ADC w ATmega16 (ATmega32 ma tak samo): #include <avr\io.h> #include <avr\signal.h> void ADC_init(unsigned...
Mam jedno jeszcze pytanie na temat ustawienia pinu PA0 jako ADC W przypadku ustawienia PC5 jest to: [syntax=c][/syntax] ADMUX = (1<<REFS0) //VCC jako napięcie referencyjne |(1<<MUX2) | (1<<MUX0); //wybór kanału pomiarowego ADC5 [syntax=c][/syntax] A jak powinno być w przypadku pinu PA0 czyli mojego ADC0 pytam bo nie rozumiem tego zapisu...
janbernat --> robię to w końcu całkowicie od początku do końca sam - muszę to raz a dobrze rozgryźć bo ten temat zawsze zostawiałem na koniec ;) Ale nie za bardzo widzę w opisach - skąd wynika to, że pomiar różnicowy jest w ATmega programowy a w ATtiny sprzętowy???? możesz mnie na to jeszcze jakoś naprowadzić w nocie? bo siedzę po uszy w notach od wczoraj...
Tak właśnie podłączam. Zresztą, próbowałem na wszystkie sposoby... Cały czas albo 0 albo 1023. Program: [syntax=c] #include <stdio.h> #include <avr/io.h> #include <util/delay.h> #include "hd44780.h" int main(void) { char str[16]; lcd_init(); LCD_DISPLAY(LCDDISPLAY); ADCSRA = (1<<ADEN); ADMUX = (1<<REFS1) | (1<<REFS0);...
Szanowni Forumowicze, Chciałbym zrobić układ, który będzie zapisywał dane czasu do pamięci eeprom po wyłączeniu zasilania. W tym celu na wyjściu stabilizatora liniowego LM7805 umieściłem diodę schotky, za nią kondensator podtrzymujący zasilanie, zasila on sam procesor i reset procka. Przed diodą jest zasilanie reszty układów. Układ wykrywania awarii...
Projektuję ładowarkę ogniw niklowych i mam problem ze zczytywaniem napięcia na akumulatorze. Projekt jest oparty na ATmega16 z wewnętrznym taktowaniem 1MHz. Potrzebuję odczytać napięcie na wejściu ADC0 i wyświetlić jego wartość na wyświetlaczu LCD. Moj kod programu (oparty w dużej mierze na informacjach z sieci): void odczyt_nap(void) { unsigned int...
TCCR1B |= (1<<CS12) | (1<<CS10); :D ok. działa. Dodano po 17 Mam problem jeszcze z przetwornikiem ADC w trybie free Run. Zrozumiałem to tak, że pomiar ciągły jest włączany ustawieniem 1 na ADATE i inicjowany ustawieniem 1 na ADSC. Co źle ustawiam? [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #define LED1 PC0 int main()...
Uruchomiłem na Atmega16 przetwornik ADC . Zasilam układ napięciem stabilizowanym 5 V. Do zasilania VCC, AVCC, AREF podłączyłem kondesatory i dlawik 10 uH jak na załączonym rysunku. F_CPU = 8 MHz preskaler = 128 pojedyncza konwersja Problemem jest otrzymywany wynik pomiaru, który przy pomiarze 5,12 v (mierzone miernikiem) wskazuje mi na wyświetlaczu...
Kolega BlueDraco ma 100% rację. Masz po prostu złe podejście do tematu. Ja bym to zrobił inaczej: W przerwaniu timera wyzwalałbym tylko pierwszą konwersje. W przerwaniu ADC: - odrzuciłbym jedna lub więcej pierwszych konwersji - po odrzuceniu zrobiłbym średnia z kilku, lub zastosował średnią bieżącą jak to pokazał kolega BlueDraco. W przerwaniu ADC nie...
Dzięki za pomoc panowie. Napisałem od nowa program na innym timerze i ruszyło, wyskalowałem sobie to jak chciałem i git. Potem dodałem drugi potencjometr na inne wejście i zdefiniowałem drugi timer - tym razem chcę pwm o wypełnieniu z zakresu 6-27%. Generalnie mi się to udało mniej więcej obliczyć i zaimplementować. Ale pojawił się problem z pomiarem...
http://obrazki.elektroda.pl/2512179600_1... http://obrazki.elektroda.pl/4049407700_1... wyniki pomiaru za pomocą woltomierza z kazdego przycisk: right=0; up=0,6V down=1,25V left=1,99V select=3,11
Witam! Chciałem się zabawić z przetwornikiem ADC, podłączyłem go w/g tego schematu: [url=http://1.bp.blogspot.com/... Tylko że bez dławika, bo znajomy elektronik powiedział mi że mogę go pominąć. To tyle jeśli chodzi o schemat. Powiem tylko ze dodałem jeszcze do portu b...
Witam. Używam dwóch kanałów do pomiaru ADC i wyświetlam ich wynik na LCD. Pojawia się taki problem nachodzenia na siebie obu pomiarów, tzn. gdy odłączę napięcie mierzone z jednego wyjścia to wynik z drugiego kanału pojawia się również na pierwszym zamiast 0. Poniżej przedstawiam kod: [syntax=actionscript]void Display(unsigned int num) { char temp[]...
Dodałem: [syntax=c]ISR(TIMER1_COMPA_vect) { }[/syntax]Teraz chociaż funkcja Test() wykonuje się raz, tak jak powinna. Zmieniłem tryb ADC na pojedynczy: [syntax=c]void InitADCSingle(void) { ADMUX = _BV(REFS0) | _BV(REFS1) ;// Napięcie odniesienia wewnętrzne, AREF podłączony z GND przez 100n //| _BV(MUX0); // Kanał ADC1 ADCSRA = _BV(ADEN) // Aktywacja...
Hey. Mam pytanko. W ATmega16 mierze w ADC0 napiecie podawane przez potencjometr 100k podlaczony do VCC poprzez dzielnik napiecia na rezystorze 91k. A wiec potencjometr ma ok 2.5V zasilania i tyle samo w zakresie 0-ok2.5V Zrobilem tak bo nie wiedzialem czy moge podac na wejscie ADC calosc VCC(5V) czyli bez dzielnika. Pytanie pierwsze: brzmi czy moge...
No tak fakt w atmega16 inaczej się tryb free run odpala... Ok to może inaczej... Wypróbuj ten kod... #include <avr/interrupt.h> #include <inttypes.h> #include <stdlib.h> #include <math.h> #include <avr/io.h> #define F_CPU 8000000 //20000000 //18432000 //3686400 #define CYCLES_PER_US ((F_CPU+500000)/1000000)...
Procesor: ATmega16 Kwarc: 1MHz Potencjometr: 47k char. A, podłaczony do ADC0. Wyjście: OC1A #include <avr/io.h> #include <avr/interrupt.h> int i=0; int main(void) { DDRD= 0xFF; PORTD=0xFF; ADMUX = 0x60; ADCSRA = 0xE2; SFIOR = 0x00; TCCR1A = 0xA3; TCCR1B = 0x02; OCR1A = 0x073; OCR1B = 0x073; TCNT1 = 0x00; sei(); for(;;) { i=ADCH; i=i-37;...
Ustaw napięcie referencyjne na AREF: ADMUX=(1<<MUX1)|(1<<REFS0)
Witam, mam problem z pomiarami ADC atmedze 16. Mam podłączony do wejścia ADC0 potencjometr obrotowy 5k, chcę dokonać pomiarów po czym dobierać odpowiednią wartość PWM, regulując prędkość obrotową silnika. Kiedyś już zrobiłem taki reulator na atmedze 8 i nie było żadnych problemów. A tutaj z początku była taka sytuacja że przy napięciu 0 - VCC, preskalerze...
witam:) mam problem z programem dotyczącym pomiaru częstotliwości i napięcia oraz transmisji pomiędzy AVR po SPI, chciałbym się poradzić i uzyskać wskazówki w jaki sposób sprawnie to zrobić, dysponuję następującymi przerwaniami pomiar częstotliwości [syntax=cpp] ISR(TIMER1_COMPA_vect) //obsługa przerwania po zliczeniu ustawionej liczby { impulsy=licznik;...
Masz gotowca [syntax=c][code] #include <avr/io.h> #include <util/delay.h> unsigned int pomiar; // Zmienna do przechowywania wyniku pomiaru // LED #define LED_PIN (1<<PD5) #define LED_TOG PORTD ^= LED_PIN //makrodefinicja zmiany stanu diody //Klawisz #define KEY_PIN (1<<PD7) // definicja pinu do którego podłączony jest klawisz...
tylko z tym wklejaniem jest tak że mi strasznie miga na ekranie a zrobiłem wyświetlanie od flagi TOV1 poniżej wrzucam kod programu [syntax=cpp] int main(void) { TCCR0 |=(1<<CS00)|(1<<CS01)|(1<... //ustawienie timera 0 na zliczanie impulsów zewnętrznych TCCR1B |=(1<<CS12); //ustawienie źródła zegara timera 1 z preskalerem...
Witam. Zamiszczam kod ( bardzo prosty ) do obsługi serva. Procesorek to ATmega16 na kwarcu 1 MHz. Potencjometr sterujacy servem podłączony do ADC0 i o wartości 47k. Servo prafa ( hiteca i kongrada tez działały) podpiety do OC1A. Przypominam ze to najprostrzy program. Dodam tylko ze jesli serwo przesuwa sie skokami w 1 strone to nalezy zmienić preskaler....
Hej, mam projekt, w którym na podstawie mikrokontrolera Atmel AVR ATMEGA16L, który jest zamontowany na karcie STK500, mam obliczyć prędkość podłączonego do niego wiatraka komputerowego (wentylatora). Prędkość wiatraka może być sterowana. Pomiar prędkości przeprowadzany jest za pomocą transoptora. Prędkość wiatraka przedstawiona powinna być za pomocą...
_StinG_ pisał żebym dał w pliku więc tak zrobiłem.... Ale to chyba nie jest najważniejsze? ;) Dodano po 1 [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> // #define PORT_AD PORTA // Port z wejściami analogowymi #define DDR_AD DDRA unsigned int p=0; volatile unsigned...
wrzucam całośc, co do Twojego rozwiązania sprawdzze jutro. Wcześniej nie wywoływałem funkcji w przerwaniu to pojawiały się 'krzaki' na LCD - przerwanie od T0 przerywało chyba funkcję wyświetl() dlatego dałem w przerwaniu. /*======================================... WinAvR wersja WinAVR-20050214 **Program obsługujący woltomierz/generator...
zatem tak procesor atmega16, zaprogramowałem atmege na pomiar ciągły i mam bardzo dziwny problem, atmega połączona przez UART do komputera, zczytywanie w labview. tam trzeba ustawić takie coś jak delay before raad(ms), w kodzie na atmedze ustawiłem _delay(100), w programie tez, i mam bardzo dziwny problem, nic nie jest podpięte do przetwornika, powinna...
Mam problem z Regulatorem PID na ATmega16. kod programu: #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <stdlib.h> #include "delay.h" #include "lcd.h" #include "stdint.h" #define F_OSC 8000000UL #define cbi(sfr, bit) (_SFR_BYTE(sfr)...
Tak wygląda plik do konfiguracji i obsługi ADC: #include <iom16.h> //#include <defio.h> #include "MyLib.cpp" #ifndef __LCD_CPP #define __LCD_CPP #endif #define AREF_REFERENCE 0X00//AREF REFERENCE; VREF TURN OFF #define AVCC_REFERENCE 0X40//AVCC WITH EXTERNAL CAPACITOR #define INTRL_REFERENCE 0XC0//INTERNAL 2.56V REFERENCE #define...
pawel_konin -> podaj dokładny schemat (lub zdjęcie HD) i program którym to testujesz. [syntax=c] /* * GccApplication1.c * * Created: 2012-11-12 16:25:45 * Author: Pawel */ #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <util/atomic.h> #include <math.h> #define NOOFSAMPLES 128 // ilosc...
Nie wiem po co Ci ten zmienny przecinek - chyba nie ma problemu z policzeniem wszystkiego na liczbach całkowitych. Nie wiem też, na co miałbyś czekać w przerwaniu. Możesz do wszystkiego używać jednego timera, np. tego od PWM - to zwykle lepsze rozwiązanie niż zgłaszanie przerwań z kilku timerów. Sam zadecyduj, jak często chcesz wykonywać pomiary -...
Mam pytanie dotyczące łączenia instrukcji programów w całość . Chodzi mi o to że robię sobie termometr w którym odczytam sobie temperaturę wewnętrzną ,zewnętrzną a także napięcie swojego akumulatora i czas,datę z układu DS1307.W jaki sposób połączyć kilka plików to ze sobą w sposób profesjonalny? Czy wszystko ująć w jednej pętli "while"?.ale wtedy są...
Witam Napisałem na podstawie kursu http://mikrokontrolery.blogspot.com/2011... program na uC Atmega16 mierzący napięcie ,lekko go modyfikując ,żeby wynik pomiaru zamiast na LCD został wysłany przez UART/USART do AVRTV na uC Atmega8 . Obsługę UART znalazłem tu http://www.forbot.pl/forum/topics49/c-ua...
twoje ustawianie ADMUX robi OR, więc ustawiając 1 a potem 2 tak naprawdę ustawiasz 3 a przy okazji, zamiast czekać na ADIF lepiej czekać na wyzerowanie ADSC, odpadnie ci dodatkowa operacja zerowania ADIF
Kolega bardzo pobieżnie czyta pdf'y: Zakładka Analog to Digital Converter, ADC Conversion Result i opis rejestru ADMUX (tabela 84)
W pierwszych dwóch dodałem nawiasy, a do funkcji dopisałem void i już nie ma żadnych błędów [syntax=c]ADMUX = (ADMUX & ~(1<<REFS1)) | (1<<REFS0); ADCSRA = (1<<ADPS2) | ((1<<ADPS1) & ~ (1<<ADPS0)); void ADC_0(void) uint16_t read_ADC(void) int main(void)[/syntax]
Prosty przykład (oscylator wew. 8MHz): uint16_t pomiar(uint8_t kanal) { ADMUX = (ADMUX & ~0x07) | (kanal & 0x07);// ustaw kanal ADCSRA |= _BV(ADSC); //rozpocznij konwersje while(ADCSRA & _BV(ADSC)); //czekaj az skonczy return ADCW; //zmierzona wartosc } int main(void) { ADCSRA =...
Przykładowy program realizujący przedstawiony przeze mnie sposób. [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "LCD.h" volatile unsigned int adcon = 0; ISR(TIMER0_OVF_vect) { static char st; if((st++)%2) { PORTB |= 1<<0; //pb0=0 PORTB &= ~(1<<1); //pb1=1 adcon = ADC; //odczyt...
Hmm chciałem obliczyć procent [syntax=c]#include <avr/io.h> #include <math.h> #define LED1 PC0 #define LED2 PC1 int procent; int main(void) { DDRC |= (1<<LED1) | (1<<LED2); ADCSRA = _BV(ADEN) |_BV(ADPS2)|_BV(ADPS1); ADMUX = (1<<REFS1) | (1<<REFS0) | (1<<ADLAR); ADMUX = (0<<REFS1) | (1<<REFS0); while(1)...
W jaki sposób w Bascomie ustawić w ATmega16 przetwornik ADC w tryb pomiaru różnicowego ze wzmocnieniem? Wprost z Bascoma nie można. Jak to zrobić w asemblerze? Prosze o odpowiedź kogoś kto PRZETESTOWAŁ to na sprzęcie! Jak należy rozumiec pomiar różnicowy adresowany w ADMUX: MUX4:0 =01000 (ADC0-ADC0 x 10) lub MUX4:0 =01110 (ADC2-ADC2 x200)? Czy jest...
Robię woltomierz używajac adc z atmega16, przy pomiarach mam błedy na poziomie 10mV do 50mV. Kondensatory 100nF wpięte między gnd a Aref i Acc. Przy używaniu Aref i Acc jako źródła odniesienia wyniki takie same. Czy jest sposob aby to poprawić ? Skalibrować ? Miernik : EZ DM-441 Miernik / Atmega 5.001 4.9951 4.094 4.101 3.42 3.41 2.80 2.79 1.91 1.88...
admux getadc admux bascom kanal admux
wyszukiwanie fragmentu tekstu klapa sharan kenwood 880sd
spawarka paton zawór aquastop bosch
Wzmacniacz Sony ES do kolumn Tonsil Zeus 250W Fioletowy pasek na dole ekranu telewizora - przyczyny i rozwiązania