Vývojová deska ATMEL včetně AVR ATmega16 v2

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(www:)
Řádka 4: Řádka 4:
  
 
[[Soubor:VYV-deska-AVR-ATmega16-09.jpg|right|400px]]
 
[[Soubor:VYV-deska-AVR-ATmega16-09.jpg|right|400px]]
 +
 +
[[Soubor:mobilni-robot-05.jpg|right]]
  
 
==Na desce modulu je:==
 
==Na desce modulu je:==
Řádka 52: Řádka 54:
  
  
[[Soubor:VYV50_ATmega-01.jpg|thumb]]
+
== Postup: ==
[[Soubor:VYV50_ATmega-02.jpg|thumb]]
+
[[Soubor:mobilni-robot-05.jpg|300px|thumb]]
+
 
+
Postup:
+
  
 
* Bootloader - je program kterým je ATmega naprogramovaný z výroby. Tento firmware umožňuje nahrát vyvíjenou aplikace do paměti Flash pomocí seriové linky USB.  
 
* Bootloader - je program kterým je ATmega naprogramovaný z výroby. Tento firmware umožňuje nahrát vyvíjenou aplikace do paměti Flash pomocí seriové linky USB.  
Řádka 64: Řádka 62:
 
* K naprogramování mikroprocesoru, stiskněte tlačítko RESET
 
* K naprogramování mikroprocesoru, stiskněte tlačítko RESET
  
== Ukázkové programy:==
+
<gallery>
 
+
Soubor:VYV50_ATmega-01.jpg|MegaLoad
* Blikání LED
+
Soubor:VYV50_ATmega-02.jpg|WIN správce zařízení
* Počítadlo impulsů
+
</gallery>
  
 
== www: ==
 
== www: ==
Řádka 78: Řádka 76:
  
 
[[Soubor:html.jpg]] [http://www.microsyl.com/index.php/2010/03/30/megaload/ SW:MegaLoad]
 
[[Soubor:html.jpg]] [http://www.microsyl.com/index.php/2010/03/30/megaload/ SW:MegaLoad]
 +
 +
== Ukázkové programy:==
 +
 +
=== Blikání LED ===
 +
 +
[[Soubor:VYV50_blik.jpg|right|300px]]
 +
 +
<source lang"C">
 +
 +
</source>
 +
 +
 +
=== Počítadlo impulsů ===
 +
 +
[[Soubor:VYV50_pocitadlo_impulsů.jpg|right|300px]] [[Soubor:FTP.jpg]][ftp://obelix.sps-pi.cz/N/janousek/mikroLAB/87_VYV%20Vyvojove%20sestavy/VYV50%20AVR%20ATmega32/02_Po%E8itadlo%20by%20Jan%20Nov/D4_14_Novotny_pocitadlo_impulzu_ATmega32.hex Download hex]
 +
 +
<source lang"C">
 +
 +
/*
 +
* impulzy.c
 +
*
 +
* Created: 13.4.2012 10:28:29
 +
*  Author: Novotný Jan D4 2012
 +
* Brána A bity 3 -0 řídí Anody
 +
* Brána C řídí jednotlivé segmenty v pořadí: -GFEDCBA na bitech 7 až 0 (7. bit neobsazen)
 +
* Vstup počítadla 0.bit na PORTB
 +
* Reset 2. bit na bráně PORTD
 +
*/
 +
 +
#define F_CPU 16000000
 +
 +
#define SETBIT(BRANA, BIT) ((BRANA) |= (1<<(BIT)))
 +
#define CLRBIT(BRANA, BIT) ((BRANA) &= ~(1<<(BIT)))
 +
#define NEGBIT(BRANA, BIT) ((BRANA) ^= (1<<(BIT)))
 +
#define TESTBIT(BRANA, BIT) ((BRANA) & (1<<(BIT)))
 +
 +
#include <avr/io.h>
 +
#include <avr/interrupt.h>
 +
#include <stdint.h>
 +
#include <stdlib.h>
 +
void napiscislo(uint8_t numero);
 +
 +
volatile uint32_t pocet=0;
 +
volatile uint8_t digits[4]={0,0,0,0};
 +
void LED_Print(uint32_t num);
 +
 +
int main(void)
 +
{
 +
DDRC=0xff;
 +
DDRA=0xff;
 +
PORTC=0xff;
 +
PORTA=0xff;
 +
SETBIT(PORTB,PB0);
 +
SETBIT(PORTD,PD2);
 +
MCUCR|=(1<<ISC01);
 +
GICR|=(1<<INT0);
 +
TCCR1B|=(1<<WGM12)|(1<<CS11);
 +
TCCR0|=(1<<CS01);
 +
TIMSK|=(1<<TOIE0)|(1<<OCIE1A);
 +
OCR1A=19999;
 +
sei();
 +
    while(1)
 +
    {
 +
    }
 +
}
 +
 +
void napiscislo(uint8_t numero)
 +
{
 +
if (numero==1)
 +
PORTC=0b11111001;
 +
else if (numero==2)
 +
PORTC=0b10100100;
 +
else if (numero == 3)
 +
PORTC=0b10110000;
 +
else if (numero==4)
 +
PORTC=0b10011001;
 +
else if (numero==5)
 +
PORTC=0b10010010;
 +
else if (numero==6)
 +
PORTC=0b00000010;
 +
else if (numero==7)
 +
PORTC=0b11111000;
 +
else if (numero==8)
 +
PORTC=0b10000000;
 +
else if (numero==9)
 +
PORTC=0b10010000;
 +
else if (numero==0)
 +
PORTC=0b11000000;
 +
}
 +
 +
void LED_Print(uint32_t num)
 +
{
 +
cli();
 +
uint8_t i=0,j;
 +
while(num)
 +
{
 +
digits[i]=num%10;
 +
i++;
 +
num=num/10;
 +
}
 +
for(j=i;j<4;j++)
 +
digits[j]=0;
 +
sei();
 +
}
 +
 +
ISR(INT1_vect)
 +
{
 +
pocet=0;
 +
}
 +
 +
ISR(TIMER1_COMPA_vect)
 +
{
 +
static char port=0;
 +
port*=2;
 +
if (!TESTBIT(PINB,PB0))
 +
port+=1;
 +
if(port==0x07)
 +
pocet++;
 +
LED_Print(pocet);
 +
/*
 +
if (pocet==10)
 +
pocet=0;*/
 +
}
 +
 +
ISR(TIMER0_OVF_vect)
 +
{
 +
static uint8_t display=0;
 +
PORTC=0xff;
 +
PORTA=0x00;
 +
switch (display)
 +
{
 +
case 4:
 +
display=1;
 +
PORTA=0b1110;
 +
napiscislo(digits[0]);
 +
break;
 +
case 1:
 +
display=2;
 +
PORTA=0b1101;
 +
napiscislo(digits[1]);
 +
break;
 +
case 2:
 +
display=3;
 +
napiscislo(digits[2]);
 +
PORTA=0b1011;
 +
break;
 +
case 3:
 +
display=4;
 +
PORTA=0b0111;
 +
napiscislo(digits[3]);
 +
break;
 +
default:
 +
display=4;
 +
}
 +
}
 +
 +
</source>

Verze z 26. 11. 2012, 18:10

Univerzální modul je vhodný pro výuku programování mikroprocesorů ATMEL řady AVR řady.


VYV-deska-AVR-ATmega16-09.jpg
Mobilni-robot-05.jpg

Obsah

Na desce modulu je:

  • Mikrokontrolér: AVR ATMEGA16 16PU
  • Quartz rezonátor: 16MHz
  • Tlačítko RESET
  • Konektor pro programování ISP
  • Potenciometr pro napětí Vref
  • Vyvedení všech portů mikroprocesoru
  • HD44780 2x16 LCD s podsvícením
  • LCD displej na konektoru - možnost výměny
  • Nastavení kontrastu displeje LCD
  • MMC / SD karta s vyhazovačem
  • Multiplexní 7-segment LED 4ks
  • LED 8 ks
  • 8ks tlačítka mikrospínače klávesnice.
  • Čtyři potenciometry pro nastavení napětí kapaliny 0-5V
  • Výkonové tranzistory s otevřeným kolektorem (8 výstupů) ULN2803
  • Reproduktor - bzučák
  • Digitální teploměr DS1820 1-wire
  • TSOP4836 infračervený přijímač
  • Hodiny reálného času PCF8583
  • I2C sběrnice s restorami 4K7
  • Sériové paměti EEPROM 24C16
  • Převodník RS485 - SN75176
  • Baterie - baterie CR232
  • USB - možnost napájení modulu
  • USB-RS232 - postaven na systému FR232RL
  • Napájecí zdroj (usměrňovač most, filtr kapacitní, stabilizátor 7805
  • 132 podložky pro vlastní potřebu - univerzální deska:

Fotografie:


Postup:

  • Bootloader - je program kterým je ATmega naprogramovaný z výroby. Tento firmware umožňuje nahrát vyvíjenou aplikace do paměti Flash pomocí seriové linky USB.
  • Konfigurace musí být nastavena propojkami u FT232 Txd<-->PD0 a Rxd<---> PD1
  • Nainstalujte si program MegaLoad
  • Po spuštění vyberte soubor formátu *.hex, kterým chcete naprogramovat MCU, vyberte příslušný port (např. Port11) a nastavte přenosovou rychlost 57 600bps. Pozn. Správný port najdete ve WIN ve správci zařízení v řádku Porty (COM a LPT)
  • K naprogramování mikroprocesoru, stiskněte tlačítko RESET

www:

FTP.jpg VYV50 AVR ATmega32

Icon-pdf.gif Dokumentace

Html.jpg Prodej: Gotronik.pl Carpro.cz

Html.jpg SW:MegaLoad

Ukázkové programy:

Blikání LED

 


Počítadlo impulsů

Chyba při vytváření náhledu: Soubor patrně chybí: /var/www/wiki.sps-pi.cz/www/images/2/27/VYV50_pocitadlo_impulsů.jpg
FTP.jpgDownload hex
/*
 * impulzy.c
 *
 * Created: 13.4.2012 10:28:29
 *  Author: Novotný Jan D4 2012
 * Brána A bity 3 -0 řídí Anody
 * Brána C řídí jednotlivé segmenty v pořadí: -GFEDCBA na bitech 7 až 0 (7. bit neobsazen) 
 * Vstup počítadla 0.bit na PORTB
 * Reset 2. bit na bráně PORTD
 */ 
 
#define F_CPU 16000000
 
#define SETBIT(BRANA, BIT) ((BRANA) |= (1<<(BIT))) 
#define CLRBIT(BRANA, BIT) ((BRANA) &= ~(1<<(BIT))) 
#define NEGBIT(BRANA, BIT) ((BRANA) ^= (1<<(BIT))) 
#define TESTBIT(BRANA, BIT) ((BRANA) & (1<<(BIT)))
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#include <stdlib.h>
void napiscislo(uint8_t numero);
 
volatile uint32_t pocet=0;
volatile uint8_t digits[4]={0,0,0,0};
void LED_Print(uint32_t num);
 
int main(void)
{
	DDRC=0xff;
	DDRA=0xff;
	PORTC=0xff;
	PORTA=0xff;
	SETBIT(PORTB,PB0);
	SETBIT(PORTD,PD2);
	MCUCR|=(1<<ISC01);
	GICR|=(1<<INT0);
	TCCR1B|=(1<<WGM12)|(1<<CS11);
	TCCR0|=(1<<CS01);
	TIMSK|=(1<<TOIE0)|(1<<OCIE1A);
	OCR1A=19999;
	sei();
    while(1)
    {
    }
}
 
void napiscislo(uint8_t numero)
{
	if (numero==1)
		PORTC=0b11111001;
	else if (numero==2)
		PORTC=0b10100100;
	else if (numero == 3)
		PORTC=0b10110000;	
	else if (numero==4)
		PORTC=0b10011001;
	else if (numero==5)
		PORTC=0b10010010;
	else if (numero==6)
		PORTC=0b00000010;
	else if (numero==7)
		PORTC=0b11111000;
	else if (numero==8)
		PORTC=0b10000000;
	else if (numero==9)
		PORTC=0b10010000;
	else if (numero==0)
		PORTC=0b11000000;
}
 
void LED_Print(uint32_t num)
{
	cli();
	uint8_t i=0,j;
	while(num)
	{
		digits[i]=num%10;
		i++;
		num=num/10;
	}
	for(j=i;j<4;j++) 
		digits[j]=0;
	sei();
}
 
ISR(INT1_vect)
{
	pocet=0;
}
 
ISR(TIMER1_COMPA_vect)
{
	static char port=0;
	port*=2;
	if (!TESTBIT(PINB,PB0))
		port+=1;
	if(port==0x07)
		pocet++;
	LED_Print(pocet);
		/*
	if (pocet==10)
		pocet=0;*/
}
 
ISR(TIMER0_OVF_vect)
{
	static uint8_t display=0;
	PORTC=0xff;
	PORTA=0x00;
	switch (display)
	{
		case 4:
			display=1;
			PORTA=0b1110;
			napiscislo(digits[0]);
			break;
		case 1:
			display=2;
			PORTA=0b1101;
			napiscislo(digits[1]);
			break;
		case 2:
			display=3;
			napiscislo(digits[2]);
			PORTA=0b1011;
			break;
		case 3:
			display=4;
			PORTA=0b0111;
			napiscislo(digits[3]);
			break;
		default:
			display=4;
	}		
}
Osobní nástroje
Jmenné prostory
Varianty
Akce
Rychlá navigace
NEJ aktivity
Nejlepší předměty
Nejlepší MCU
SW-HW
Ostatní
Utility
Nástroje
Tisk/export