Staci trochy hledat
http://www.deramax.cz/vysilac-prijimac-58ghz-konig/d-71809-c-919/
Příspěvky odeslané z IP adresy 62.177.99.–
Pokud mas AVR studio, tak staci nainstalovat jeste WINAVR a potom zmacknout F7 a ejhle v adresari projektu vznikne hex soubor, ktery uz nahrajes do uC jednim z vyse uvedenych kroku.
Podle toho jaky mas programator, tak to jde bud primo z AVR studia, nebo pokud chces rychle neco nahrat a necekat az prijde postou programator, tak jde zbastlit LPT ISP programator (zadej do googlu) 4 draty, 4 odpory a LPT konektor (pokud mas na pocitaci LPT) a pote lze nahrat SW do uC pres Ponyprog2000 (Windows XP)
Aby si nemusel pouzivat gooooogle :smile3:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#include "lcd.h"
uint16_t EEMEM eepromword=1500;
unsigned int servo;
int main(void)
{
uint16_t RAMword;
for (;;)
{
RAMword = eeprom_read_word(&eepromword);
servo=25;
eeprom_write_word(&eepromword,servo);
}
No nevim jak se v menu pohybujes nahoru dolu, spise bych udelal tlacitka dolu, nahoru OK a zpet.
Listujes seznamem dolu nahoru a dalsi uroven dosahnes tlacitkem OK, tlacitkem zpet se vratis.
Kdyz uz nejde dale tlacitkem OK, znamena to, ze jsi v nejake polozce, ktera jde editovat a nahoru dolu bych inkrementoval/dekrementoval hodnotu.
Pokud se stiskne OK, hodnota se ulozi do EEprom, kde to zustane i kdyz to vypnes/zapnes.
Udelat viceurovnove menu je docela slozite, pokud nevis kolik je urovni, ale pokud vis napr. ze je max. 3-urovne, da se udelat treba pres pole.
Ale s efektivitou bych si nedela hlavu, pokud se to vejde do pameti, kdyz uz se to nevejde, prekopam program jinak.
Vyvojovy diagram mi nejde otevrit
Nevim jestli to pomuze, protoze nepises co pouzivaz za LCD
Mam uC AtMega8, LCD pouzivam MC0802A-SYL/H
Stahnul jsem si knihovnu pro praci s LCD z http://jump.to/fleury.
Prodratovano je to tak ze pro komunikaci pouzivam PORTD, D0-3 mam nadratovane na PORTD0-3 a zbyvajici piny R/S, R/W a E jsou nadratovane na PORTD 5,6,7, samozrejme napajeni LCD a podsviceni dle datasheetu
Potom je treba upravit v lcd.h kousek programu takto:
#define LCD_PORT PORTD /**< port for the LCD lines */
#define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
#define LCD_RS_PORT LCD_PORT /**< port for RS line */
#define LCD_E_PORT LCD_PORT /**< port for Enable line */
#define LCD_RW_PORT LCD_PORT /**< port for RW line */
#define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */
#define LCD_DATA1_PIN 1 /**< pin for 4bit data bit 1 */
#define LCD_DATA2_PIN 2 /**< pin for 4bit data bit 2 */
#define LCD_DATA3_PIN 3 /**< pin for 4bit data bit 3 */
#define LCD_RS_PIN 5 /**< pin for RS line */
#define LCD_RW_PIN 6 /**< pin for RW line */
#define LCD_E_PIN 7 /**< pin for Enable line */
Program na zobrazeni textu potom vypada takto:
#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "lcd.h"
unsigned char i;
unsigned int del=1000;
//-----------------------------------------------------------------------------
int main(void)
{
char buffer[8];
lcd_init(LCD_DISP_ON); //Inicializace LCD
lcd_clrscr(); //vymazani LCD
lcd_gotoxy(0,0); //nastaveni na pozici 0,0
lcd_puts("RoBoProG"); //vypsani textu
lcd_gotoxy(0,1);
lcd_puts("Run:");
for (i=3;i>0;i--)
{
sprintf(buffer,"%2i",i);
lcd_gotoxy(4,1);
lcd_puts(buffer);
_delay_ms(500);
}
}
Doufam ze jsem to tady moc nezaneradil
Takže opravdu pomohli 2 věci.
a) Přidat do programu ješte PORTC=0xFF;
b) Vstup spínat s GND, což trochu nechápu, protože GND je vlastně 0V nebo ne?
Ale funguje to...
Děkuji za postrčení.
Prosim muzete uvest nejaky priklad jak to nastavit.
Myslel jsem, ze kdyz nastavim
DDRC=0x00; Tak je to nastavene.
Programuji v AVR Studiu.
Zkousel jsem k tomu dat jeste
PORTC=0x00 nebo PORTC=0xFF ale ani jeden z toho nefunguje.
Dekuji
Nejak se tam ten program zkopiroval 2x tak plati ten spodni... util delay tam byla jeste puvodne z blikani LED.
Přeji příjemný den
Prosím o pomoc s jednoduchým prográmkem, který nefunguje, tak jak chci.
V případě že na PINC0 není 5V měla by svítit dioda na adrese PORTD0, když tam je 5V tak by měla svítit dioda na adrese PORTD1.
Ale zatím to funguje tak, že když tam není 5V tak svítí obě diody, a když tam je 5V tak zhasne dioda na adrese PORTD1.
Můžete mi pomoci odhalit chybu?
Mockrat dekuji
/* Program blikani LED*/
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRC=0x00;
DDRD=0xFF;
while(1)
{
if (PINC & 0b00000001)
//Pokud je na PINC0 privedeno +5V
PORTD=0x01;
//Rosvit diodu na PortuD adresa 0
else
PORTD=0x02;
//Jinak rosvit diodu na PORTuD adresa 1
}
}/* Program blikani LED*/
#include <avr/io.h>
int main(void)
{
DDRC=0x00;
DDRD=0xFF;
while(1)
{
if (PINC & 0b00000001)
//Pokud je na PINC0 privedeno +5V
PORTD=0x01;
//Rosvit diodu na PortuD adresa 0
else
PORTD=0x02;
//Jinak rosvit diodu na PORTuD adresa 1
}
}