projekt - elektronicky kompas s vystupom na displej

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 :slight_smile:
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 :slight_smile:

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 :smiley:

#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 :slight_smile:, ale rad sa dozvedam nieco nove.

nemyslel registr v procesoru ale jak sem to pochopil tak v senzoru pripojenem pres TWI (I2C)

:slight_smile:
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 :slight_smile:

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 :slight_smile:

chcem sa Vam podakovat za rady, aj vdaka Vam som bakalar :slight_smile:

tu je moj kompas

:arrow_right: administrator: externí soubory přesunuty
kompas.jpg

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í ?