Simpel C kod för en vanlig HD44780
kopplat om nu, och testat, först blev det inget, sen när jag stötte till den lite så blev de massor med konstiga tecken...
sen så stängde jag av, och skalade om kablarna satte i dom i kopplingsplinten igen, kålsvart..
aja, mätte lite, det verkade ganska bra...
det pendlade lite mellan 1 å 5v på bussen och på de andra va de 0 förutom E som va 5v..
sen så stängde jag av, och skalade om kablarna satte i dom i kopplingsplinten igen, kålsvart..
aja, mätte lite, det verkade ganska bra...
det pendlade lite mellan 1 å 5v på bussen och på de andra va de 0 förutom E som va 5v..

aja, om du får tid över kaske du skulle kunna skicka de till
limpan456@gmail.com

tack föresten

Jag har lite grejer som jag tror kan hjälpa dig virr3.
Det är 8 bitars dataöverföring, och jag hoppas det skall vara såpass enkelt så du hänger med.
Först och främst, för att inte du eller jag skall behöva ändra allt. Skriv in de här överst i din C-kod. Lite simpla alias för att göra resten av koden lite överskådligare. Vet inte om du behöver just checkbit men skitsamma, har saxat det här ur ett större program jag har.
Ändra i dessa alias lcd_data_port till den PORT som du använder, likaså vilken port du vill lägga dina 3 styrbitar på.(lcd_styrbit) Glöm inte heller att kolla så att RS, RW och E på får rätt siffra på lcd_styrbit porten.
Här har du en bra förklaring på lcd:ns stift om det skulle behövas.
http://www.avrbeginners.net/interfacing ... bit_1.html
Innan vi kör något annat så se även till att du har ställt in den 8-bitars datautgångens pinnar till utgångar och de 3 styrbitarnas pinnar till utgångar med.
Du skall först och främst initiera LCD:n innan du kan sända tecken till den.
Det ser ut så här när det är enkelt skrivet och kommenterat. Det som händer där är att vi i tur och ordning går igenom alla funktionsregistren för att ställa in LCD:n som vi vill ha den. Alla funktioner står beskrivna på den sidan jag länkade till.
Som du ser så ligger det en delay_ms(); ibland, det är en fördröjning i antal millisekunder som behövs på det stället i koden.
Jag kan ta med den med ifall.
Sen är det då dags att skicka ett tecken till LCD:n och det kan du göra på med denna funktion:
Som du anropar med lcd_skriv_ett_tecken('A');
Testa det där! Hoppas det hjälper dig på traven, men jag hjälper dig tyvärr inte nåt vidare nu med massa färdig kod. Men jaja! Man kan ju behöva en språngbräda ibland, Nu har du ju förhoppningsvis tid över och hinna lära dig nåt annat på AVR:en istället =)
Du får säga till om du tycker nåt verkar mongo i koden... Ha det!
Det är 8 bitars dataöverföring, och jag hoppas det skall vara såpass enkelt så du hänger med.
Först och främst, för att inte du eller jag skall behöva ändra allt. Skriv in de här överst i din C-kod. Lite simpla alias för att göra resten av koden lite överskådligare. Vet inte om du behöver just checkbit men skitsamma, har saxat det här ur ett större program jag har.
Ändra i dessa alias lcd_data_port till den PORT som du använder, likaså vilken port du vill lägga dina 3 styrbitar på.(lcd_styrbit) Glöm inte heller att kolla så att RS, RW och E på får rätt siffra på lcd_styrbit porten.
Här har du en bra förklaring på lcd:ns stift om det skulle behövas.
http://www.avrbeginners.net/interfacing ... bit_1.html
Kod: Markera allt
#define setbit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define clearbit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
#define checkbit(ADDRESS,BIT) (ADDRESS & (1<<BIT))
#define lcd_data_port PORTD
#define lcd_styrbit PORTB
#define RS 0
#define RW 1
#define E 2
Du skall först och främst initiera LCD:n innan du kan sända tecken till den.
Det ser ut så här när det är enkelt skrivet och kommenterat. Det som händer där är att vi i tur och ordning går igenom alla funktionsregistren för att ställa in LCD:n som vi vill ha den. Alla funktioner står beskrivna på den sidan jag länkade till.
Kod: Markera allt
void lcd_initiering(void)
{
clearbit(lcd_styrbit, RS); // Aktiverar att vi skall skriva instruktioner till LCD.
clearbit(lcd_styrbit, RW); // Aktiverar att vi skall skicka till LCD.
setbit(lcd_styrbit, E); // Förbedered för att lägga data på porten.
// REGISTER, GRUNDFUNKTIONER
clearbit(lcd_data_port, 0); // Förflytta inte display i sidled.
setbit(lcd_data_port, 1); // Förflytta cursor i sidled.
setbit(lcd_data_port, 2); // Hög för att göra inställningar i detta register.
clearbit(lcd_data_port, 3);// Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 4); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 5); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 6); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 7); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_styrbit, E); // Sänder data. E går låg för att LCD:n skall ta emot.
delay_ms(5);
setbit(lcd_styrbit, E); // Data sänt. E går hög igen.
// REGISTER, DISPLAY
setbit(lcd_data_port, 0); // Vill ha blinkande "svartbox" cursor.
setbit(lcd_data_port, 1); // Aktivera cursor.
setbit(lcd_data_port, 2); // Display PÅ.
setbit(lcd_data_port, 3); // Hög för att göra inställningar i detta register.
clearbit(lcd_data_port, 4); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 5); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 6); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 7); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_styrbit, E); // Sänder data. E går låg för att LCD:n skall ta emot.
delay_ms(5);
setbit(lcd_styrbit, E); // Data sänt. E går hög igen.
// REGISTER, AVANCERADE FUNKTIONER
clearbit(lcd_data_port, 0); // Används ej.
clearbit(lcd_data_port, 1); // Används ej.
clearbit(lcd_data_port, 2); // Fonten sätts till 5x7 pixlar.
setbit(lcd_data_port, 3); // Anger att displayen är "mer än 1 rads display".
setbit(lcd_data_port, 4); // Sätter 8 bitars dataläge.
setbit(lcd_data_port, 5); // Hög för att göra inställningar i detta register.
clearbit(lcd_data_port, 6); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_data_port, 7); // Hålls låg för att inte skriva i annat register.
clearbit(lcd_styrbit, E); // Sänder data. E går låg för att LCD:n skall ta emot.
delay_ms(5);
setbit(lcd_styrbit, E); // Data sänt. E går hög igen.
}
Jag kan ta med den med ifall.
Kod: Markera allt
void delay_ms(unsigned int x)
{
unsigned int y=x;
setbit(TCCR1B, CS10); // Starta Timer1, Prescaler 1024. CLK=3906kHz
clearbit(TCCR1B, CS11);// Starta Timer1, Prescaler 1024. CLK=3906kHz
setbit(TCCR1B, CS12); // Starta Timer1, Prescaler 1024. CLK=3906kHz
while(y>0)
{
setbit(TIFR, TOV1); // Cleara overflowflagga.
TCNT1=65531; // Laddar med värde för att få exakt en millisekund.
while(!checkbit(TIFR, TOV1)) {} // Vänta på overflowflagga.
y--;
}
clearbit(TCCR1B, CS10); // Timer1 avstängd.
clearbit(TCCR1B, CS11); // Timer1 avstängd.
clearbit(TCCR1B, CS12); // Timer1 avstängd.
}
Sen är det då dags att skicka ett tecken till LCD:n och det kan du göra på med denna funktion:
Kod: Markera allt
void lcd_skriv_ett_tecken(unsigned char ett_tecken)
{
setbit(lcd_styrbit, RS); // Aktiverar att vi skall skriva till display på LCD.
clearbit(lcd_styrbit, RW); // Aktiverar att vi skall skicka till LCD.
setbit(lcd_styrbit, E); // Förbedered för att lägga data på porten.
lcd_data_port=ett_tecken; // Data lagt på porten.
clearbit(lcd_styrbit, E); // Sänder data. E går låg för att LCD:n skall ta emot.
delay_ms(1);
setbit(lcd_styrbit, E); // Data sänt. E går hög igen.
}
Testa det där! Hoppas det hjälper dig på traven, men jag hjälper dig tyvärr inte nåt vidare nu med massa färdig kod. Men jaja! Man kan ju behöva en språngbräda ibland, Nu har du ju förhoppningsvis tid över och hinna lära dig nåt annat på AVR:en istället =)
Du får säga till om du tycker nåt verkar mongo i koden... Ha det!