Kaunas, Eiguliai, darželis, dailė, šokiai, elektronika, 486DX, LŽŪU, linux, fotografija, dviratis, automobiliai, akvariumai, žmona, dukra...

28th
JAN

ATmega fuse nustatymai

Parašė dinux kategorijoje Atmega

Pirmą kartą bandant nustatyti fuse pagal šį puslapį http://www.engbedded.com/fusecalc kažką sumaišiau ir kontroleris patapo neveiksnus. Nusipirkus antrą kontrolerį ir po kiek laiko vis dėlto vėl prisireikė didesnio dažnio ir čia visai netyčia atradau AVR8 Burn-O-Mat: a GUI for avrdude. Archlinux’e galima įdiegti:

yaourt -S avr8-burn-o-mat

Programa paprasta ir aiški. Antras bandymas pasisekė ir dabar mano kontroleris dirba su išoriniu kvarcu.

Ekranvaizdis_2015-01-27_23-38-27

26th
JAN

ATmega16 jungimas su kompiuteriu (USB)

Parašė dinux kategorijoje Atmega

Pirmiausia pramokus šiek tiek kaip elgtis su LED’ais, mygtukais prijungtais prie ATmegos, greitai atsiranda noras surinkta informaciją atiduoti kompiuteriui arba iš kompiuterio pasiųsti tam tikras komandas, kad kontroleris galėtu jas vykdyti.

Taigi pirmasis bandymas buvo pasinaudojus MAX232 ir COM <-> USB perėjimu perduoti/priimti informaciją su kontroleriu. Nežinau tai buvo litavimo klaida, o gal sugebėjau kažkaip sugadinti MAX232, bet niekaip nepavyko priimti duomenų iš ATmegos. Išsiųsti sekėsi puikiai, kontroleris junginėjo LED’us pagal kompiuterio siunčiamas komandas.

Pasibaigus kantrybei buvo nuspręsta atsisiųsti jau pagaminta UART’ą. DealExtreme e parduotuvė čia puikiai pasitarnavo. Pajungus viskas iškarto veikė. Duomenys vaikščiojo į abi puses.

Linux’as įrenginį atpažysta taip:

[ 7884.863380] usbserial: USB Serial support registered for generic
[ 7884.864737] usbcore: registered new interface driver cp210x
[ 7884.864756] usbserial: USB Serial support registered for cp210x
[ 7884.864798] cp210x 2-5:1.0: cp210x converter detected
[ 7884.864951] usb 2-5: cp210x converter now attached to ttyUSB0

Pirma klaida dėl kurios galima ilgam strigti tai RX sujungimas su RX, o TX su TX. Teisingas jungimas būtų ATmegos16A RXD (14’ta koja) reikia jungti su UART’o TX’u, o ATmega16A TXD (15’ta koja) reikia jungti su UART’o RX’u. Reiktu neužmiršti sujungti ir trečiojo laido tai GND.

Kad būtų patogiau, panaudojau laidus iš kompiuterinio korpuso.

IMGP9853.PEF_MLSZSX

Testavimui susikompiliuoju tokį kodą:

// Kvarco taktinis dažnis
#define F_CPU 4000000UL
#include <inttypes.h>
#include <avr/io.h>
#include <util/delay.h>

// Susijungimo greitis
#define USART_BAUDRATE 9600UL
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)


void USARTInit(uint16_t ubrr_value)
{
   //Set Baud rate

   UBRRL = ubrr_value;
   UBRRH = (ubrr_value>>8);

   /*
   >> Asynchronous mode
   >> No Parity
   >> 1 StopBit
   >> char size 8
   */

   UCSRC=(1<<URSEL)|(3<<UCSZ0);

   //Įjungiam gavima ir siuntimą
   UCSRB=(1<<RXEN)|(1<<TXEN);


}



//Funkcija naudojama duomenims nuskaityti
//Ši funkcija lauks tol kol atsiras kažkokie duomenys
char USARTReadChar()
{
   while(!(UCSRA & (1<<RXC)))
   {
      //Nieko nedarom
   }
   return UDR;
}

//Rašom duomenys į UART'ą
void USARTWriteChar(char data)
{
   while(!(UCSRA & (1<<UDRE)))
   {
      //Nieko nedarom
   }
   UDR=data;
}


void main()
{
   // Kintamasis
   char data;

   // Susijungiam
   USARTInit(BAUD_PRESCALE);

   // Amžinas ciklas
   while(1)
   {
      // Nuskaitom simbolį
      data=USARTReadChar();

      // Nuskaitytą simbolį gražinam atgal tik
      // jį apskliaudžiam laužtiniais skliaustais    

      USARTWriteChar('[');
      USARTWriteChar(data);
      USARTWriteChar(']');

   }
}

Rezultatas:
Ekranvaizdis - 2015.01.26 - 20:49:41

29th
MAY

Pirmi žinksniai su ATmega16

Parašė dinux kategorijoje Atmega

Apie šitą gėrį skaičiau jau senokai, bet niekaip neprisiruošdavau. Bet išaušo ta diena.

Pirmiausia užsisakiau programatorių. Kainavo pilnai su siuntimu ~28LTL. Pirktas iš ebay, USBasp klonas (http://www.fischl.de/usbasp/). Atkeliavus programatoriui jau gumos netempiau, nes labai norėjosi išbandyti kaip viskas veikia. Susipirkau ko reikia ir susilitavau schemą pateikta elektronika.lt puslapyje.

Pora pakeitimų, tai šviesos diodai jungti ne per 1…2K kaip parodyta schemoje, o per 330Ω Dar vienas mažas nukrypimas, kad aš nedėjau jokio mygtuko. Pirmoji mintis ir užduotis buvo išmokti junginėti diodus.

Nepaslaptis, kad naudoju Archlinux, to pasekoje programos kodas pateiktas ankščiau minėtam elektronika.lt puslapyje netiko – nesikompiliavo. Su programa Gnome-avrdude įrašius HEX’ą diodai mirksėjo. Taigi mano supratimu problema buvo tame, kad gcc-avr kompiliatorius veikia truputi kitaip nei winavr ir/ar kiti windows’iniai.

Padraugavus su Google pavyko parašyti ir sukompiliuoti štai tokį kodą:

#define F_CPU 1000000UL
#include <inttypes.h>
#include <avr/io.h>
#include <util/delay.h>

void sleep()
{
   _delay_ms(50);

}

int main(){

DDRD = 0b11111111;

while (1) {
 PORTD = 0b10000001;
 sleep();
 PORTD = 0b01000010;
 sleep();
 PORTD = 0b00100100;
 sleep(); 
 PORTD = 0b00011000;
 sleep(); 
 PORTD = 0b00011000;
 sleep(); 
 PORTD = 0b00100100;
 sleep(); 
 PORTD = 0b01000010;
 sleep(); 
 }
}

Programą kompiliavau štai tokiomis komandomis (programos kodas parašytas test.c byloje):

avr-gcc -mmcu=atmega16 -Os test.c -o test.o
avr-objcopy -j .text -j .data -O ihex  test.o  test.hex

C kodą rašau su Geany (http://www.geany.org/)
Gnome-avrdude konfiguracija USBasp programatoriui yra tokia:

Programmer laukelyje USBasp pasirinkimo nebuvo, todėl jį įvedžiau ranka.
Spustelnam Open, pasirenkame paruošta HEX bylą ir ją atveriame. Atvėrus spustelnam mygtuką kur parodyta mikroschma su rodykle nukreipta į ja. Jei viskas gerai sujungta turite pamatyti štai tokį (ar panašų) rezultatą:

Programa iškarto pradeda veikti. Aukščiau pateiktas kodo rezultatas youtubo filmuke (atsiprašau už kokybe, neturiu jokio geriau filmuojančio aparato):

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close