Witam
Znalazłem taki kod napisany w c na atmega8 do wyświetlania znaków na fabrycznie montowanym wyświetlaczu w Oplu. Ale po trzech dniach walki z kodem oraz braku efektów w końcu się poddałem po prostu ręce mi opadły. I tu zwracam się z prośbą do programistów, którzy już przez to przebrneli. Dodam że używam AVRStudio, prędkość procesora ustawiłem na 8000000Hz, kompilacje bez optymalizacji. Piny w wyświetlaczu podłączyłem bezpośrednio do odpowiednich nóżek w wyświetlaczu(8-znakowy), z adresami już kombinowałem na milion sposobów i efekt ciągle jest ten sam, czyli brak jakiejkolwiek reakcji. Ogólnie to ja bym się przyczepił tylko funkcji send() nie rozumiem jak ona działa. Czekam na drobne podpowiedzi i wracam dalej do nierównej walki z wyświetlaczem:(
Znalazłem taki kod napisany w c na atmega8 do wyświetlania znaków na fabrycznie montowanym wyświetlaczu w Oplu. Ale po trzech dniach walki z kodem oraz braku efektów w końcu się poddałem po prostu ręce mi opadły. I tu zwracam się z prośbą do programistów, którzy już przez to przebrneli. Dodam że używam AVRStudio, prędkość procesora ustawiłem na 8000000Hz, kompilacje bez optymalizacji. Piny w wyświetlaczu podłączyłem bezpośrednio do odpowiednich nóżek w wyświetlaczu(8-znakowy), z adresami już kombinowałem na milion sposobów i efekt ciągle jest ten sam, czyli brak jakiejkolwiek reakcji. Ogólnie to ja bym się przyczepił tylko funkcji send() nie rozumiem jak ona działa. Czekam na drobne podpowiedzi i wracam dalej do nierównej walki z wyświetlaczem:(
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define sda PB1
#define scl PB2
#define mrq PB3
#define czas_puls_us 400
#define czas_startpuls 200
//int n=0;
unsigned char dana,i, t,s,d,j ,cnt1, z1, p;
unsigned int liczba,b,a,cnt; //zmienne
char wi;
void puls_us(void)
{
_delay_us(100); //100
}
void startpuls(void) //czasy
{
_delay_us(50); //50
}
void sek(void)
{
}
void start(void)
{
DDRB = 0xFF;
PORTB=0xFF; //strat
PORTB |=_BV(3); //mrq=0;
puls_us();
PORTB &=~_BV(3); //mrq=1; //bit startu na magistrali I2C START
PORTB &=~_BV(1); //sda=1;
PORTB &=~_BV(2); //scl=1;
startpuls();
PORTB |=_BV(1); //sda=0;
startpuls();
PORTB |=_BV(2); //scl=0;
startpuls();
}
void stop(void) //STOP
{
PORTB &=~_BV(3); //mrq=1;
PORTB &=~_BV(2); //scl=1;
startpuls();
PORTB &=~_BV(1); //sda=1;
//portb=28;
}
void send(unsigned char dana) // wysyłanie
{
for(i=0;i<8;i++) //będzie 8 bitów
{
if(dana&0x80) //badaj najstarszy bit wysyłanego znaku
{
PORTB &=~_BV(1); //sda=1; //wyślij "1"
}
else
{
PORTB |=_BV(1); //sda=0; //wyślij "0"
}
PORTB &=~_BV(2); //scl=1;
puls_us();
PORTB |=_BV(2); //scl=0;
puls_us();
dana<<=1; //przygotuj następny bit do wysłania
}
PORTB &=~_BV(1); //sda=1;
PORTB &=~_BV(2); //scl=1;
puls_us();
PORTB |=_BV(2); //scl=0;
PORTB |=_BV(1); //sda=0;
PORTB |=_BV(3); //mrq=0;
puls_us();
}
char table[10]={0x61,0x62,0x64,0x67,0x68,0x6b,0x6d,0x6e,0x70,0x73}; //tablica cyf
void powitanie(void)
{
for (p=0; p<10;p++) {
start();
startpuls();
send(0x96);
startpuls();
PORTB |=_BV(3); //mrq=0;
startpuls();
send(0x01);
send(0x01);
send(0x01);
send(0x77);
send(0x78);
send(0x79);
send(0x71);
send(0x72);
stop();
_delay_ms(100);
}
for (p=0;p<8;p++) {
start();
startpuls();
send(0x96);
startpuls();
PORTB |=_BV(3); //mrq=0;
startpuls();
send(0x01);
send(0x01);
send(0x01);
send(0x77);
send(0x78);
send(0x79);
send(0x71);
send(0x72);
stop();
_delay_ms(100);
}
wi++;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void main () { //główny program
DDRB = 0xFF;
PORTB=0xFF;
while(1)
powitanie();
}