ATmega fuse nustatymai

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

ATmega16 jungimas su kompiuteriu (USB)

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

Mikrotik. Iš vidaus į vidų

Bet kokiam namų routeryje apsirašius prievado (port) nukreipimą iš išorės į vidų (NAT) taisyklę ta taisyklė veikia ir iš vidinio LAN. Papaišiau tokį brėžinį:
vidus_is_vidaus

Išorinis adresas 88.88.88.88
Vidinis routerio adresas 192.168.0.1
Turime tinkle serverį 192.168.0.100
Turime tinkle tris kompiuterius 192.168.0.10, 192.168.0.20, 192.168.0.30

Taigi turint tipinį Dlink’ą ir iš kažkurio kompiuterio kreiptumėmės į išorinį adresą (šiuo atveju 88.88.88.88) sėkmingai prisijungtumėm prie 192.168.0.100. Tas pats įvyktų jei kreiptumėmės iš išorės. Bet jeigu mūsų routeris yra Mikrotik ir jame aprašyta NAT’inimo taisyklė, prisijungti iš išorės pavyks, bet iš vidaus suvedus išorinį adresą susijungimas nepavyks. Problema tame, kad atsakimą jis atiduoda ne į vidinį, o į išorinį interfeisą. Problemai spręsti reikia apsirašyti dar vieną taisyklę.

Taigi abi taisyklės turėtu atrodyti taip:

/ip firewall nat add chain=dstnat action=dst-nat dst-address=88.88.88.88 protocol=tcp dst-port=80 to-port=80 to-address=192.168.0.100
/ip firewall nat add chain=srcnat action=masquerade src-address=192.168.0.0/24 dst-address=192.168.0.100

Dabar iš vidaus kreipiantis 88.88.88.88 sėkmingai pasiekiam 192.168.0.100

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