Skocz do zawartości

Paweł_1985

Użytkownicy
  • Zawartość

    20
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O Paweł_1985

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Bulowice
  • Zainteresowania
    Muzyka, Robotyka, Książki
  1. Nowa wersja z przerwaniami: #include <avr/io.h> #include <avr/interrupt.h> volatile uint16_t value; void ADC_init(void); int main (void) { ADC_init(); DDRD |=(1<<PD1); for (;;) { if (value > 1020) PORTD |= (1<<PD1); if (value < 1020) PORTD &= ~(1<<PD1); } } void ADC_init() { DDRA=0x00; PORTA=0x00; ADMUX= (1<<REFS0)|(1<<MUX1); ADCSRA= (1<<ADEN)|(1<<ADIE)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADSC); sei(); } ISR(ADC_vect) { value = ADC; } Jak ustawiam prób na 1023 to właśnie wtedy mogę zaobserwować, że progiem zadziałania diody jest 1,22V i że to jest napięcie odniesienia.
  2. Do Aref mam podłączony kondensator MKT, napięcie na Aref wynosi w zależności od konfiguracji bitów MUX: 0 - przy wybrany Aref, Vcc - przy wybranym zewnętrznym napięciu, 2,54 - przy wybranym 2,54.
  3. Niestety dalej nie działa, problem opiera się chyba raczej na napięciu odniesienia, którego w żaden sposób nie mogę zmienić na inne.
  4. Witam Napisałem program realizujący funkcję przetwornika ADC na Atmega16: #include <avr/io.h> #include <avr/interrupt.h> uint16_t value; void ADC_init(void); int main (void) { DDRD =_BV(1); for (;;) { ADC_init(); value = ADC; if (value < 1020) PORTD = _BV(1); if (value > 1020) PORTD &= ~(_BV(1)); } } void ADC_init() { DDRA=0x00; PORTA=0x00; ADMUX=(1<<REFS0); ADCSRA=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADATE)|(1<<ADSC); } Niestety pojawił się problem z napięciem odniesienia. Nie wiem dlaczego procesor jako napięcie odniesienia bierze ok. 1,22V bez względu na to co ustawię w rejestrze ADMUX. Podłączenie VCC i AVCC mam do zasilania, natomiast Vref tak jak podaje karta katalogowa przez kondensator do masy. Czy ktoś spotkał się może z podobnym problemem?
  5. Mam jeszcze pytanie, czy korzystając ze sprzętowego I2C w procesorach AVR trzeba wykorzystywać wyjścia wg noty katalogowej podpisane jako SDA i SCL czy występuje dowolność w wyborze wyjść (konfigurowanych za pomocą CONFIG SDA oraz CONFIG SCL)?
  6. Musisz poprawić składnię isntrukcji IF THEN, brakuje tam END IF na końcu instrukcji IF...THEN prawidłowo powinno to wyglądać: IF ... THEN... END IF
  7. Faktycznie, poczytałem trochę i z tego co się dowiedziałem, tak jak pisze BlackJack, Attiny2313 nie posiada modułu USI/TWI.
  8. Na podstawie poniższego artykułu wykonałem układ mający za zadanie realizować komunikację po I2C. Porty SDA i SCL obu mikroporocesorów połączyłem i zamonotwałem rezytory podciągające 4,7k. Komunikację po I2C realizuję wg artykułu Dodatkowo mikroporocesor Atmega16 posiada wyświetlacz LCD oraz klawiaturę4x4, natomiast Attiny2313 posiada nadajnikRC5. Układ ma zadanie przekazywać kod z Atmegi do Attiny celem wysłania go do robota. Niestety układ nie działa i nie mam pojęcia czemu. Proszę o pomoc, poniżej zamieszczam kod programu. $regfile = "ATtiny2313.dat" $crystal = 8000000 Config Pinb.3 = Output Dim Togbit As Byte , Command As Byte , Address As Byte Dim A As Byte Togbit = 0 Address = 0 Config Sda = Portb.5 Config Scl = Portb.7 Do I2cinit I2cstart I2crbyte Command , Nack I2cstop Gosub Wyslij Loop End Wyslij: A = 0 Do Rc5send Togbit , Address , Command Incr A Loop Until A = 7 Return $regfile = "m16def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0. Config Kbd = Portd , Delay = 100 Config Scl = Portc.0 Config Sda = Portc.1 Dim A As Byte Cls Lcd "TEST" I2cinit Do A = Getkbd() Gosub Wyslij Cls Lcd A Loop End Wyslij: I2cstart I2cwbyte A I2cstop Return
  9. Kod z helpa z Basoma nie ma opóźnienia, tak samo jak działający kod Michała. Natomiast kiedy umieściłem w kodzie Michała opóźnienie "wait" to program przestawał nadawać. Nie mam pojęcia z czym to może być związane. Próbowałem także wywoływać polecenie RC5Send w przerwaniu od Timera0 (z tego co wiem RC5Send wykorzystuje Timer1). Chciałem wykorzystać Attiny2313 tylko jako pilot RC5 komunikujący się z Atmegą16 (zawierającą główny program sterujący robotem) przez RS232 i nie wiem czy w tym przypadku będzie możliwość wykonania w ten sposób nadajnika.
  10. Zegar oczywiście zmieniłem na 8MHz, taki oscylatora mam podpięty do proca.
  11. Wrzuciłem do proca programik Michała i działa. Dziwna sprawa, zauważyłem że jak wstawiam opóźnienie po kolejnych wywołaniach komendy RC5SEND to program przestaje działać. Będę musiał zrealizować sterowanie w inny sposób.
  12. Dodam, że w przypadku takiego programiku jak poniżej dioda nadawcza wysyła sygnał - zaobserwowałem to przez aparat w telefonie. Odbiornik jednak nie odbiera sygnału. W helpie z Bascoma nie ma linijki: Config Pinb.3 = Output, jednak bez tego układ wogóle nie działa. $regfile = "ATtiny2313.dat" 'TYP PROCESORA $crystal = 8000000 Dim Address As Byte 'Deklaracje zmiennych Dim Command As Byte Dim Togbit As Byte Config Pinb.3 = Output Togbit = 0 Address = 0 Command = 1 Wait 5 Do Rc5send Togbit , Address , Command Loop End
  13. Witam W oparciu o Attiny2313 zbudowałem pilot RC5 do robota. Robot posiada odbiornik RC5 działający - sprawdzałem pilotem TV, wszystko w porządku. Nadajnik natomiast nie działa, sprawdzałem już wszystkie informacje jakie znalazłem na forach internetowych, ustawiłem fuse bity poprawnie. Schemat nadajnika wziąłem z helpa z Bascoma. Poniżej zamieszczam program wraz ze schematem nadajnika, obecnie (do testów) używam tylko jednego tranzystora i tylko jednej diody nadawczej. $regfile = "ATtiny2313.dat" 'TYP PROCESORA $crystal = 8000000 Dim Address As Byte 'Deklaracje zmiennych Dim Command As Byte Dim Togbit As Byte Config Pinb.3 = Output Togbit = 0 Address = 0 Command = 0 Wait 5 Do Rc5send Togbit , Address , Command Wait 2 Command = 1 Rc5send Togbit , Address , Command Wait 2 Command = 3 Rc5send Togbit , Address , Command Wait 2 Command = 4 Rc5send Togbit , Address , Command Wait 2 Command = 5 Rc5send Togbit , Address , Command Wait 2 Command = 6 Rc5send Togbit , Address , Command Wait 2 Loop End
  14. Na początek ma to być robot sterowany za pomocą standardu RC5, nadajnik ma być wyposażony w wybór trzech opcji sterowania robota: joystick, programowanie jazdy oraz program demo. W przyszłości chciałbym rozbudować go o czujniki oraz komunikację radiową.
  15. Faktycznie za duże były rezystory podłączone do wyjść 1 i 15, dałem zworki i robot śmiga:)
×
×
  • Utwórz nowe...