Zdravim Vas raz zas…
tak predsa len som si zaopatril LCD displey standardny s driverom KS0066, vraj je plne kompatibilny s HD44780, preto to tu pisem lebo mam na to navod
postupujem dost pomaly ale ide to
stav projektu: podarilo sa mi porozumiet LCD HD44780,
pripojenie cmps03 prebehlo uspesne,
podarilo sa mi vypisat aktualnu hodnotu registra 1 na LCD, avsak, mam jeden problem: hodnoty 0 - 127 vypisuje v poriadku, avsak od 128 hore vypisuje nejake zvlastne znaky … nemam momentalne pristup k zdrojakom, doplnim ich neskor, mozno tam bude nejaky problem s typmi premennych, snad mi poradite
neskor doplnim aj schemu s kompletnymi zdrojakmi, keby si chcel niekto nieco take postavit
Pekny Vecer
pozn.: pre Vasu informaciu, z datasheetu, cmps03 ma 16 registrov, register 1 obsahuje informaciu o uhle v rozsahu 0-255
a register 2,3 obsahuje informaciu 0 - 3599
oba udaje zodpovedaju uhlu 0 - 359 stupnov
jak mas funkci na zobrazeni dat na LCD? Nejspis mas chybu nekde tam.
void writeIntegerToLCD(uint16_t integer)
{
// Break down the original number into the thousands, hundreds, tens,
// and ones places and then immediately write that value to the LCD
uint8_t thousands = integer / 1000;
LCD_WriteData(thousands + 0x30);
uint8_t hundreds = (integer - thousands*1000) / 100;
LCD_WriteData(hundreds + 0x30);
uint8_t tens = (integer - thousands*1000 - hundreds*100 ) / 10;
LCD_WriteData(tens + 0x30);
uint8_t ones = (integer - thousands*1000 - hundreds*100 - tens*10);
LCD_WriteData(ones + 0x30);
}
Tak ja mam fce na LCD takto
void put_char(u08 data)
// Writes data to CGRAM or DDRAM.
{
lcd_port_lock_reg = 1;
LCD_CTRL_PORT = (LCD_CTRL_PORT & ~((1<<LCD_EN_BIT)|(1<<LCD_RW_BIT)|(1<<LCD_RS_BIT))) | (1<<LCD_RS_BIT);
asm volatile ("nop\n\t");
LCD_DATA_PORT = data;
asm volatile ("nop\n\t");
LCD_CTRL_PORT |= (1<<LCD_EN_BIT);
asm volatile ("nop\n\t");
LCD_CTRL_PORT &= ~(1<<LCD_EN_BIT);
asm volatile ("nop\n\t");
LCD_CTRL_PORT &= ~((1<<LCD_EN_BIT)|(1<<LCD_RW_BIT)|(1<<LCD_RS_BIT));
_delay_loop_2(DEL_CYC4_40US);
lcd_port_lock_reg = 0;
}
unsigned char put_string_xy(u08 x, u08 y, char *s)
{
goto_xy(x, y);
return put_string(s);
}
uz to fachci, rozhodol som sa pouzit menej presny register c. 1
tu je hlavna cast programu:
akekolvek navrhy vitam, nie so ziaden programator
#include “HD44780.h”
#include “cmps03.h”
int main(void)
{
LCD_Initalize();
LCD_GoTo(11,1);
LCD_WriteText(" st.");
LCD_GoTo(0,0);
LCD_WriteText("=CMPS03 COMPASS=");
LCD_GoTo(0,1);
LCD_WriteText("ANGLE = ");
unsigned int angle;
setup();
while(1)
{
angle = i2c_read(0xC0,1);
LCD_GoTo(8,1);
writeIntegerToLCD((angle+128)*1.40625);
_delay_ms(50);
}
return 0;
}
To je pre mna novinka, ze v procesore su menej presne a viac presne registre , ale rad sa dozvedam nieco nove.
nemyslel registr v procesoru ale jak sem to pochopil tak v senzoru pripojenem pres TWI (I2C)
menej presnym registrom c. 1 som myslel to, ze je reprezentovany len 8 bitmi, zatial co hodnota uchovana v registroch 2 a 3 je presnejsia teda je reprezentovana dvoma bajtmi,
ospravedlnujem sa ak som Ta uviedol do rozpakov, ale skor som ta pobavil
hello again,
chcel by som napisat program na kalibraciu modulu cmps03
kompletne info, ako na to, je tu:
http://www.robot-electronics.co.uk/htm/cmps3tech.htm
co chcem urobit je, ze ked stlacim gombik, pripojeny na nejaky pin, spusti sa nejaka cast kodu, konkretne v mojom pripade zapise sa hodnota 255 do registra 15, toto je potrebne urobit pre styri svetove strany N E S W,
od vas by som potreboval radu, ako na ten gombik …
co zkusit udelat stavovy automat pomoci
switch() {
case : //volani fce kodu pro J
case : //volani fce kodu pro S
case : //volani fce kodu pro V
case : //volani fce kodu pro Z
}
Ahojte, včera sme mali štátnice, urobil som na maximum, viac sa nedalo
chcem sa Vam podakovat za rady, aj vdaka Vam som bakalar
tu je moj kompas
administrator: externí soubory přesunuty
Gratulujem,
posli fotky i zo strany displaya.
pracujem na podobnom projekte a potrebujem pomoc…
#include “HD44780.h”
#include “cmps03.h” --> odkial zozeniem kniznicu cmps03???
napíšeš si jí ?