hallo, ik probeer een LCD aan te sturen met behulp van 4 bits in C. (ASM kan ik niet) De 4 bits is omdat de ATmega32 op een testbordje zit en daarop alleen d4-d7 aangesloten zijn.
Als het display werkt dan ga ik een print ontwikkelen. Het is dan dus ook mogelijk om eventueel 8 bits te gebruiken.
Nu heb ik dus 2 vragen...
1) Zal ik met 4 bits gaan werken, of met 8? Voor de ruimte
hoef ik het niet te laten (poorten zat) en 8 lijkt mij
makkelijker.
2) Heeft iemand een voorbeeld van een werkende aansturing
in C voor 4 bits?
Groeten en alvast bedankt!
PS heb gezien dat er meer topics zijn over de LCD maar die gingen over PIC....
8-bits is wat eenvoudiger - maar echt spannend is het verschil niet hoor.
Ik heb wel een werkende aansturing in C voor zowel 8 als 4 bits, maar dat draait wel op een DOS doos en kletst rechtstreeks tegen de hardware van de centronics poort - het was mijn 'studiemodel' van werken met de HD44780. Ga je dus niet zo mee opschieten. Verder heb ik voor de 2313 een assembly versie (redelijk basic). Werkt waarschijnlijk ook wel voor de megaxx, wellicht her en der wat aanpassen. Is wel 4-bits (want ik zit doorgaans wel weer wat krapper in mijn I/O pins 
Overigens is die ASM van Atmel zo simpel dat het toch wel de moeite loont om daar even naar te kijken hoor! (is het niet voor nu, dan wel voor later)
Dat in C is niet echt heel handig.
Ik zou best wel asm willen leren, maar zit een beetje in tijdnood. Het is voor me afstudeerproject en dit is eigenlijk maar een bijzaak. het wordt namelijk een visual basic applicatie die dmv van een interface met machines "praat". het display komt op de interface te zitten. Als dat het enige was, was het nog geen probleem. Maar ik heb voor de interface de RS232 communicatie en de IO's al in C klaar liggen.
Of is dit eenvoudig te combineren???
Je kan anders wel ff asm versie doormailen, als je daar geen problemen mee hebt.
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Er zijn diverse libraries voor de aansturing van HD44780 displays op het net te vinden. Bijv. hier http://jump.to/fleury
Xenobinol
Technology is dominated by two types of people: those who understand what they do not manage and those who manage what they do not understand
Ik heb in dit topic als eens een bruikbare C code voor 4-bits modus gepost:
Heb net ff gekeken naar beide voorbeelden.
Bij die fleury lukte het compileren wel, maar kreeg geen resultaat op lcd.
En bij die van xenobinol kreeg ik veel errors en warnings...
Beetje jammer, maar ik ga weer verder klooien...
Heb die library van Peter Fleury al een paar keer gebruikt en hij werkt prima hoor, heb je wel de constanten in lcd.h aangepast naar je opstelling? Dus klokfrequentie, poort waar het ding aan hangt etc.
Xenobinol
Technology is dominated by two types of people: those who understand what they do not manage and those who manage what they do not understand
Op 8 februari 2006 10:08:52 schreef xtreme_8ball:
En bij die van xenobinol kreeg ik veel errors en warnings...
Beetje jammer, maar ik ga weer verder klooien...
Dan doe je iets fout, wat voor een foutmeldingen krijg je eigenlijk?
Euum misschien een stomme vraag, maar je hebt toch zeker wel meer dan alleen db4 tm db7 aangesloten?
Vergeet niet de Enable, RS en RW lijnen te gebruiken 
Euum misschien een stomme vraag, maar je hebt toch zeker wel meer dan alleen db4 tm db7 aangesloten?
Vergeet niet de Enable, RS en RW lijnen te gebruiken
RW,D0,D1,D2,D3 --> ground
E --> PC3
RS --> PC2
D4 --> PC4
D5 --> PC5
D6 --> PC6
D7 --> PC7
Heb die library van Peter Fleury al een paar keer gebruikt en hij werkt prima hoor, heb je wel de constanten in lcd.h aangepast naar je opstelling? Dus klokfrequentie, poort waar het ding aan hangt etc.
Aanpassingen:
In LCD.C geen aanpassingen gedaan
In TEST_LCD.C ook geen aanpassingen
In LCD.H:
#define XTAL 16000000 (van 4MHz naar 16MHz)#define LCD_PORT PORTC /**< port for the LCD lines */
#define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN 4 /**< pin for 4bit data bit 0 */
#define LCD_DATA1_PIN 5 /**< pin for 4bit data bit 1 */
#define LCD_DATA2_PIN 6 /**< pin for 4bit data bit 2 */
#define LCD_DATA3_PIN 7 /**< pin for 4bit data bit 3 */
#define LCD_RS_PORT LCD_PORT /**< port for RS line */
#define LCD_RS_PIN 2 /**< pin for RS line */
#define LCD_RW_PORT LCD_PORT /**< port for RW line */
#define LCD_RW_PIN 0 /**< pin for RW line */
#define LCD_E_PORT LCD_PORT /**< port for Enable line */
#define LCD_E_PIN 3 /**< pin for Enable line */ De RW staat nu op PC0, maar eigenlijk ligt deze aan ground, maar dit geeft voor het programma lijkt mij geen problemen....
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \
defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \
defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__) || defined(__AVR_ATmega32__)ATmega32 toegevoegd. (niet van belang denk ik)
Hoe bedoel je "floating"? Sorry, maar ken de term niet. Bedoel je dat d0 t/m d3 niet aan ground moeten? Maar ik zo'n avr programmer, en daar zitten ze standaard aan ground.
Moet er trouwens standaard iets op het scherm komen? Of moet er eerst nog een handeling gedaan worden voordat er een reactie komt?
Zoieso moeten de D0 tm D3 niet aangesloten zijn (NC not connected / floating). Voor 4bits aansturing.
Zodra er spanning op het display komt te staan en je draait wat aan het contrast dan zou je regels moeten zien oplichten.
Je moet nu wel het display eerst initialiseren voordat je er dingen naar kunt gaan schrijven. (Zie datasheet).
Verder zie ik dat je geen bussyflag wilt uitlezen (omdat RW aan de ground hangt) hierdoor moet je de timing wel goed krijgen. Ik weet niet of je die code die hier gepost is (voor 4Mhz) daarom makkelijk om te zetten is voor 16Mhz.
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
De library van Peter Fleury gebruikt de busy flag. Daarvoor is het dus noodzakelijk om de RW aan te sluiten anders blijft de AVR eeuwig wachten.
ah vandaar 
Maandag ga ik dat gelijk proberen. Jullie horen het wel of het gelukt is!
Thanx en prettig weekend iedereen!!