Skocz do zawartości

Paweł_1985

Użytkownicy
  • Zawartość

    20
  • Rejestracja

  • Ostatnio

Wszystko napisane przez Paweł_1985

  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:)
  16. Pomierzyłem napięcia: napięcia podawane z Atmegi16 wynoszą 4,95V, napięcia na wyjściach mostka podałem wyżej w pierwszym poście, na pinach 1 i 15 zgodnie z załączonym schematem mam oporniki 1k. Przy 2V silnik się jeszcze kręci, choć przerywa troszkę. W obie strony? Tzn? Poniżej zamieszczam schematy:
  17. Tylko jak podłączam serwo bezpośrednio do zasilania z baterii to wszystko jest ok, więc widocznie elektronika nie ma na to wpływu, choć mogę się mylić.
  18. Na stronie "http://hobbyrobotyka.pl/2010/07/serwa-modelarskie-w-robotyce/" znalazłem informację, że: "Niektórzy wolą usunąć płytkę z elektroniką i zostawić sam silnik z dwoma przewodami – oczywiście, można i tak. W moim przypadku silnik jest unieruchomiony płytką, więc jej usunięcie sprawi, że zacznie się obracać. Dodatkowo, stosunkowo łatwo można odwrócić zmiany i przywrócić serwo do pierwotnej funkcjonalności (kwestia zastąpienia blokady np. wciśniętym w plastik na gorąco metalowym pręcikiem)." Dlatego zostawiłem elektronikę. Dodatkowo jak podłączam serwo do napięcia bezpośrednio z baterii to obraca się bez problemu.
  19. Serwo przerobione, przy czym nie usuwałem płytki tylko przewody podłączyłem do płytki w miejscu gdzie przylutowany jest silnik, potencjometr wylutowałem z płytki. Do filtracji napięcia stosuję kondensatory zgodnie z data sheet układu L298N czyli 100nF. Wszystkie piny są podłączone do mikrokontrolera. Jako szybkie diody użyłem diod BYV26E.
  20. Witam Niedawno zakupiłem układ L298N oraz dwa serwa SG 5010. Po podłączeniu serw do układu L298 serwa stoją w miejscu, a napięcie na nich wynosi 0V. Przy niepodłączonych serwach napięcia wynoszą: 4,2V oraz 5,3V w zależności od kierunku ruchu. Układem L298N steruję za pomocą Atmega16. Wejścia EA podłączone do wyjść Atmegi ustawionych w stan wysoki. Układ zasilam napięciem z pięciu baterii R6. Natomiast do uzyskania napięcia 5V wykorzystuję stabilizator TS2940. Czy ktoś może zetknął się z podobnym problemem?
×
×
  • Utwórz nowe...