logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATmega 128 + wyświetlacz graficzny KS0108

lukasz-student21 25 Kwi 2010 14:45 2796 4
  • #1 8001568
    lukasz-student21
    Poziom 11  
    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);
    }
    }
    }
    
  • #2 8001586
    tadzik85
    Poziom 38  
    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");
    


    Tego jestem ciekaw czy czasem optymalizator ci tego nie wywalił.
  • #3 8001619
    lukasz-student21
    Poziom 11  
    nie błędu nie zgłasza kompilator żadnego
  • #4 8001663
    netsecurite.pl
    Poziom 13  
    tu masz gotowy kod;)
  • #5 8001665
    lukasz-student21
    Poziom 11  
    poza tym wszystkie te nopy zamieniłem też na _delay_ms(1); i efekt był taki sam
REKLAMA