Witam, zaczynam zabawę z wyświetlaczami graficznymi opartymi na sterowniki Ks0108 i natrafiłem na pewien problem z którym nie mogę sobie poradzić. Mianowicie na początek chciałbym jedną linie zapełnić jakimiś zapalonymi pikselami. Niestety jego reakcja nie jest prawidłowa. Czasem zapalają się nie te piksele które powinny, nieraz wogóle nie w pierwszej linii (w tej mają się zapalać) albo wogóle nic się nie pojawia. Używam mikrokontrolera ATMega 128 z kwarcem 12MHz. Mój program jest następujący:
#include<avr/io.h>
#include<stdio.h>
#include<util/delay.h>
#define RS PORTA3
#define RW PORTA2
#define EN PORTA4
#define CS1 PORTA0
#define CS2 PORTA1
void konfig (void)
{
DDRA=0xFF;
PORTA=0;
PORTC=255;
DDRC=0xFF;
}
void delay(void)
{
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
}
void init (void)
{send(0x3F);//send(0xc0);
send(0xb8);
send(0x40);
}
void send(int data)
{
PORTA=0xf0;
PORTC=data;
PORTA&=~_BV(4);
delay;
PORTA=255;
}
void Send_data(void)
{
PORTA=0x24;
PORTC=0x0a;
delay;
PORTA&=~_BV(4);
delay;
PORTA=255;
}
void main (void)
{
_delay_ms(1000);
init();
_delay_ms(1000);
while(1){
PORTA=(0<<CS1)|(0<<CS2);
while(1)
{
PORTA=_BV(5);
Send_data;
_delay_ms(1000);
}
}
}
