witam napisałem program (wzorując sie na innych) który ma wyświetlać jeden wyraz na wyświetlaczu tid w oplu , wszystkie 3 linie podłączyłem do procesora ( pic 16f84a) przez diody (tid---I>I---pic) jednak nic nie moge wyświetlić, widziałem już kilka takich projektów ale chcę to napisać po swojemu,na początek ma wyświetlać jeden wyraz oto program
#define sda portb.f3
#define scl portb.f2
#define mrq portb.f4
unsigned char dana ,i ,ack ;
void puls_us(void) //puls clock
{
delay_us(100);
}
void startpuls(void)
{
delay_us(150);
}
void start(void)
{
//bit startu na magistrali I2C START
sda=1;
startpuls();
scl=1;
startpuls();
sda=0;
startpuls();
scl=0;
startpuls();
}
void stop(void) //STOP
{
scl=0;
sda=0;
startpuls();
scl=1;
startpuls();
sda=1;
startpuls();
}
void send(unsigned char dana) // wysyłanie
{
ack=1;
for(i=0;i<8;i++) //będzie 8 bitów
{
if(dana&0x80) //badaj najstarszy bit wysyłanego znaku
{
sda=1;
ack=~ack; //wyślij "1"
}
else
{
sda=0; //wyślij "0"
}
//i2c_delay(0);
scl=1;
puls_us();
scl=0;
puls_us();
dana<<=1; //przygotuj następny bit do wysłania
}
if(ack=1)
{
sda=1;
scl=1;
puls_us();
scl=0;
}
else
{
sda=0;
scl=1;
puls_us();
scl=0;
}
}
void main () {
trisb=0;
while(1) {
portb=255;
mrq=0;
delay_us(950);
mrq=1;
start();
send(0x94);
startpuls();
mrq=0;
send(0x10);
send(0x10);
send(0x9b);
send(0x12);
send(0x37);
send(0x9b);
send(0x9b);
send(0x9b);
send(0x9b);
send(0x9b);
mrq=1;
stop();
}
}
Próbowałem z innymi czasami ale również nie działa , ponieważ pomysły już mi sie skończyły i sam sobie nie poradze prosze o jakieś rady.
#define sda portb.f3
#define scl portb.f2
#define mrq portb.f4
unsigned char dana ,i ,ack ;
void puls_us(void) //puls clock
{
delay_us(100);
}
void startpuls(void)
{
delay_us(150);
}
void start(void)
{
//bit startu na magistrali I2C START
sda=1;
startpuls();
scl=1;
startpuls();
sda=0;
startpuls();
scl=0;
startpuls();
}
void stop(void) //STOP
{
scl=0;
sda=0;
startpuls();
scl=1;
startpuls();
sda=1;
startpuls();
}
void send(unsigned char dana) // wysyłanie
{
ack=1;
for(i=0;i<8;i++) //będzie 8 bitów
{
if(dana&0x80) //badaj najstarszy bit wysyłanego znaku
{
sda=1;
ack=~ack; //wyślij "1"
}
else
{
sda=0; //wyślij "0"
}
//i2c_delay(0);
scl=1;
puls_us();
scl=0;
puls_us();
dana<<=1; //przygotuj następny bit do wysłania
}
if(ack=1)
{
sda=1;
scl=1;
puls_us();
scl=0;
}
else
{
sda=0;
scl=1;
puls_us();
scl=0;
}
}
void main () {
trisb=0;
while(1) {
portb=255;
mrq=0;
delay_us(950);
mrq=1;
start();
send(0x94);
startpuls();
mrq=0;
send(0x10);
send(0x10);
send(0x9b);
send(0x12);
send(0x37);
send(0x9b);
send(0x9b);
send(0x9b);
send(0x9b);
send(0x9b);
mrq=1;
stop();
}
}
Próbowałem z innymi czasami ale również nie działa , ponieważ pomysły już mi sie skończyły i sam sobie nie poradze prosze o jakieś rady.