Czy wolisz polską wersję strony elektroda?
Nie, dziękuję Przekieruj mnie tamRemus napisał:Jeśli chodzi schemat to jest wszystko ok, u mnie w symulacji działa na prostym programiku napisanym w bascomie (bo C nie znam). Radzę więc posprawdzać od strony programowej.
#define lcd_symulacja
do
{
//czekamy chwilke, az zaskoczy
_delay_us( 2 * F_CPU / 1000000 + 2);
//pierwszy impuls
sbi( lcd_wire_port, lcd_E_wire);
}while( bit_is_set( lcd_data_bus_pin, lcd_busy_flag));
//odbieramy dane (MSB)
lcd_address = lcd_data_bus_pin;
//moze delay ??? na 1us
_delay_us( 3);
//stan niski na E
cbi( lcd_wire_port, lcd_E_wire);
//czekamy chwilke
_delay_us( 3);
//przetwarzamy dane, obcinajac busy flag
lcd_address &= 0b01110000;
//drugi impuls
sbi( lcd_wire_port, lcd_E_wire);
//czekamy chwilke
_delay_us( 3);
//pobieramy dane (LSB)
lcd_address = lcd_address | (lcd_data_bus_pin >> 4);
//stan niski na E
cbi( lcd_wire_port, lcd_E_wire);
//_delay_us( 3);
//przelaczamy sie na wyjscie
lcd_data_bus_ddr |= 0b11110000;
cbi( lcd_wire_port, lcd_RW_wire);
do
{
//pierwszy impuls
sbi( lcd_wire_port, lcd_E_wire);
//czekamy chwilke, az zaskoczy
_delay_us( 2 * F_CPU / 1000000 + 2);
//odbieramy dane (MSB)
lcd_address = lcd_data_bus_pin;
//stan niski na E
cbi( lcd_wire_port, lcd_E_wire);
//czekamy chwilke
_delay_us( 3);
//przetwarzamy dane, obcinajac busy flag
lcd_address &= 0b01110000;
//drugi impuls
sbi( lcd_wire_port, lcd_E_wire);
//czekamy chwilke
_delay_us( 3);
//pobieramy dane (LSB)
lcd_address = lcd_address | (lcd_data_bus_pin >> 4);
//stan niski na E
cbi( lcd_wire_port, lcd_E_wire);
_delay_us( 3);
}while( bit_is_set( lcd_data_bus_pin, lcd_busy_flag));
//przelaczamy sie na wyjscie
lcd_data_bus_ddr |= 0b11110000;
cbi( lcd_wire_port, lcd_RW_wire);
#ifdef lcd_symulacja
lcd_wait_until_ready()
{
//kod odpowiedzialny za poprawne działanie podczas symulacji
}
#endif
#ifndef lcd_symulacja
lcd_wait_until_ready()
{
//kod odpowiedzialny za poprawne działanie podczas normalnej pracy
}