Projekte
workwind
BGX1 firmware
main.c
Projekte
Forum
Doku
Öffentliche Projekte
Startseite
Beispielprogramme
Projekte von anderen
Welcome
Username
Passwort
Eingeloggt bleiben
Zugangsdaten vergessen?
Registrieren
Projektverwaltung
⇨ Please choose! ⇦
——————————————————
✎ Create new project...
★ Browse existing projects...
——————————————————
⚬ MotorTest#1
⚬ C Tutorial 8#1
⚬ NIBO2 C Project#1
⚙ C Tutorial 15#1
⚬ 2010_11_18_el_test001#1
BGX1 firmware
adc.c
adc.h
battery.xbm
bgx1_protocol.h
Biene.xbm
display.c
display.h
exclamation.xbm
gfx.c
gfx.h
i2c.c
i2c.h
i2cconf.h
images.c
images.h
iodefs.h
iodefs_bgx1.h
main.c
MarsRover.xbm
Nase.xbm
nicai_logo.xbm
pwm.c
pwm.h
question.xbm
smily1.xbm
smily2.xbm
Project details
Compiler settings
Nachrichten
Sie sind nicht eingeloggt.
Neuigkeiten
★
NiboRoboLib 3.6
2017-01-17: Neue Version 3.6
★
NiboRoboLib 3.4.1
2016-04-16: Neue Version 3.4.1
★
Coding Tutorial
2015-11-22: Jetzt auch für den NIBO burger!
Site-Statistic
7433 private projects
378 public projects
16180353 lines compiled
58212 builds
NIBO
@
bgx1_firmware/main.c [read only]
/* */ #include "iodefs.h" #include "display.h" #include "gfx.h" #include "pwm.h" #include "i2c.h" #include "adc.h" #include "images.h" #include "bgx1_protocol.h" #include <util/delay.h> void drawImage (uint8_t id) { gfx_draw_xbm_P(image_getWidth(id), image_getHeight(id), image_getBits(id)); } void print_hexdigit(uint8_t val) { if (val<10) val+='0'; else val+='a'-10; gfx_print_char(val); } void print_hex (uint8_t val) { char c1=val/16; char c2=val%16; if (c1<10) c1+='0'; else c1+='a'-10; if (c2<10) c2+='0'; else c2+='a'-10; gfx_print_char(c1); gfx_print_char(c2); } uint8_t activeCmd; uint8_t lastWidth; uint16_t lastAnalog; uint8_t bgx1_status = 0xff; void doReceive (uint8_t receiveDataLength, uint8_t* recieveData) { if (receiveDataLength==0) { activeCmd = CMD_INVALID; return; } activeCmd = recieveData[0]; switch (activeCmd) { case CMD_Reset: display_init(); gfx_init(); gfx_term_clear(); DDRC = (DDRC & 0xfc); PORTC = (PORTC & 0xfc); IO_LEDS_PORT |= IO_LEDS_MASK; // set Bits to disable LEDs pwm_channel_A = 0; bgx1_status = 0x00; display_update_alt(); break; case CMD_SetStatus: bgx1_status = recieveData[1]; break; case CMD_Move: gfx_move(recieveData[1], recieveData[2]); break; case CMD_Mode: gfx_draw_mode(recieveData[1]); break; case CMD_FillAll: gfx_fill(recieveData[1]); break; case CMD_Print: recieveData[receiveDataLength]=0; gfx_print_text((const char *)(recieveData+1)); break; case CMD_TextWidth: recieveData[receiveDataLength]=0; lastWidth=gfx_text_width((const char *)(recieveData+1)); break; case CMD_SelectFont: gfx_set_proportional(recieveData[1]); break; case CMD_HLine: gfx_hline(recieveData[1]); break; case CMD_VLine: gfx_vline(recieveData[1]); break; case CMD_Box: gfx_box(recieveData[1], recieveData[2]); break; case CMD_Bitmap: gfx_draw_xbm(recieveData[1], recieveData[2], recieveData+3); break; case CMD_EmbeddedImage: { uint8_t id = recieveData[1]; gfx_draw_xbm_P(image_getWidth(id), image_getHeight(id), image_getBits(id)); } break; case CMD_LineTo: gfx_lineTo(recieveData[1], recieveData[2]); break; case CMD_TermClear: gfx_term_clear(); break; case CMD_TermGoto: gfx_term_goto(recieveData[1], recieveData[2]); break; case CMD_TermScroll: gfx_term_scroll(recieveData[1]); break; case CMD_TermPrint: recieveData[receiveDataLength]=0; gfx_term_print((const char *)(recieveData+1)); break; case CMD_SyncPort: DDRC = (DDRC & 0xfc) | (recieveData[1] & 0x03); PORTC = (PORTC & 0xfc) | (recieveData[2] & 0x03); break; case CMD_GetAnalog: lastAnalog = adc_read(recieveData[1]); break; case CMD_SyncInterface: { uint8_t val = 0; val |= (recieveData[1] & 0x01)?0:_BV(IO_LEDS_BIT_Y1); val |= (recieveData[1] & 0x02)?0:_BV(IO_LEDS_BIT_Y2); val |= (recieveData[1] & 0x04)?0:_BV(IO_LEDS_BIT_Y3); val |= (recieveData[1] & 0x08)?0:_BV(IO_LEDS_BIT_Y4); IO_LEDS_PORT = (IO_LEDS_PORT & ~IO_LEDS_MASK) | val; display_update_alt(); } break; case CMD_SetIllumination: pwm_channel_A = MAKE_WORD(recieveData[1], recieveData[2]); break; } } uint8_t doTransmit(uint8_t transmitDataLengthMax, uint8_t* transmitData) { uint8_t cmd=activeCmd; activeCmd = CMD_INVALID; switch (cmd) { case CMD_Reset: case CMD_SetStatus: case CMD_Move: case CMD_Mode: case CMD_FillAll: case CMD_SelectFont: case CMD_TermClear: case CMD_TermGoto: case CMD_TermScroll: case CMD_TermPrint: case CMD_SetIllumination: return 0; case CMD_Print: case CMD_HLine: case CMD_VLine: case CMD_Box: case CMD_Bitmap: case CMD_EmbeddedImage: case CMD_LineTo: transmitData[0] = gfx_get_x(); transmitData[1] = gfx_get_y(); return 2; case CMD_TextWidth: transmitData[0] = lastWidth; return 1; case CMD_SyncPort: transmitData[0] = (PINC & 0x03); return 1; case CMD_GetAnalog: transmitData[0] = HIBYTE(lastAnalog); transmitData[1] = LOBYTE(lastAnalog); return 2; case CMD_SyncInterface: { uint8_t val = 0; val |= get_input_groupbit(IO_SENS, BTN1)?0:0x01; val |= get_input_groupbit(IO_SENS, BTN2)?0:0x02; val |= get_input_groupbit(IO_SENS, BTN3)?0:0x04; val |= get_input_groupbit(IO_SENS, BTN4)?0:0x08; transmitData[0] = val; return 1; } case CMD_GetVersion: transmitData[0] = HIBYTE(BGX1_VERSION); transmitData[1] = LOBYTE(BGX1_VERSION); return 2; case CMD_GetStatus: transmitData[0] = bgx1_status; return 1; } return 0; } void plot_logo(uint8_t x, uint8_t y) { gfx_move(x+6, y+0); gfx_box(14, 3); gfx_move(x+6, y+5); gfx_box(14, 6); gfx_move(x+0, y+7); gfx_box(4, 6); gfx_move(x+22, y+7); gfx_box(4, 6); } int main() { activate_output_group(IO_LEDS); activate_output_bit(IO_KEY); set_output_group(IO_LEDS); clear_output_bit(IO_KEY); set_output_group(IO_SENS); activate_output_bit(IO_DISP_LIGHT); clear_output_bit(IO_DISP_LIGHT); display_init(); gfx_init(); gfx_set_proportional(1); gfx_draw_mode(GFX_DM_JAM2); gfx_move(16, 0); drawImage(IMG_NICAI_LOGO); gfx_move(38, 5); gfx_print_text("nicai-systems"); gfx_move(0, 19); gfx_hline(128); plot_logo(52,25); gfx_move(48,40); gfx_print_text("NIBObee"); gfx_move(0, 52); gfx_hline(128); //gfx_move(46, 56); //gfx_print_text("(c) 2010"); gfx_move(15, 56); gfx_print_text("BGX1 - Version "); print_hex(HIBYTE(BGX1_VERSION)); gfx_print_char('.'); print_hex(LOBYTE(BGX1_VERSION)); // gfx_move(12, 12); // gfx_lineTo(20, 40); i2c_init(); i2c_setSlaveReceiveHandler(doReceive); i2c_setSlaveTransmitHandler(doTransmit); i2c_setLocalDeviceAddr(11<<1, 1); pwm_init(); while(1==1) { enable_interrupts(); _delay_ms(10); } return 0; }
Compiler results:
Werbung
Online
dan
docX
FloKre
jeanniebland8449
KylieSat
lavondax4578413909105
lavonneverge51520
warrenhinder6456