hallo,
ik ben bezig om met een atmega16 een display aan te sturen.
nu las ik ergens dat je in de LCD.h file de pinnen kunt aanpassen waar het een en ander is aangesloten.
de vraag is eigenlijk, waar vind ik die LCD.h file ?

Lees hier eens. Heb er zeer goede ervaringen mee.

Edit 1: Voor user gedefinieerde karakters, op deze site zijn zeer gemakkelijk de juiste waardes te berekenen.

Edit 2: in bijlage de settings voor het new heaven 4 * 20 display. 8 bits en RW aangesloten.

het zal ongetwijfeld wel aan mij liggen maar het is mij nog niet erg duidelijk, ik heb er al wel wat over gelezen en gezocht en zelfs een werkend LCD programma gekopieerd. maar waar staat die LCD.h file nou eigenlijk ?

in het werkend programma wat ik nu heb staat volgens mij het LCD.h gedeelte in het programma zelf. er staat ieder geval geen #include <lcd.h> in het programma. de uitgangen die ik graag voor mijn lcd gebruik kan ik ook in het programma wijzigen.

graag wil ik dat gedeelte uit het programma, en die uitgangen in die lcd.h bestand doen......maar waar vind ik die ?

Er zit een zoekfunctie in de windows verkenner, gebruik die!

hd44780.h (en hd44780.c) doet identiek hetzelfde als een file lcd.h. Je vind deze onder deze [url="www.avrfreaks.net/sites/default/files/project_files/hd44780_111.zip&qu…].

Pak de zip file uit en kopieer hd44780.h en hd44780.c naar de map waarin je main staat. Bovenaan komt dan #include "hd44780.h".

In hd44780_settings.h zet je de instellingen van je display. Ook dit bestand dient in je main map te staan.

Je kan wel sharen vanuit een andere map, maar dit heb ik alleszins niet gedaan.

Makkelijker kan bijna niet.

ps: hd44780 is de controller die zowat de standaard heeft bepaald voor een lcd display. Bijna alle gebruikte controllers zijn hieraan compatibel.

[Bericht gewijzigd door buckfast_beekeeper op (12%)]

ja dat wist ik, ik ga met bovenstaande aan de slag. ieder bedankt voor de reacties.

even tijd gevonden om te testen,
zip bestand gedownload en uit gepakt,
hd44780.h & hd44780.c naar map gekopieerd waar programma in staat.
alleen is er bij het uitpakken geen bestand:
hd44780.settings.h uitgepakt maar wel een bestand:
hd44780_settings_example.h als ik deze bij de eerdere 2 bestanden zet vind ik hem niet meer terug.

im mijn program. staat nu:
#include "hd44780.h" bij compilen krijg ik
een error dat hij #include "hd44780_settings.h" niet kan vinden of zoiets. en dat klopt ook wel want die zat niet in mijn ZIP bestand.

wie weet raad vanaf hier ?

Van de AVR freaks website

hd44780_settings_example.h - This is an example of the hd44780_settings.h file that the library requires (and will try to include). The settings that are intended to be customized for each project are located in this file.

Non-shared method:

1. Copy these files into your project directory.
2. Rename "hd44780_settings_example.h" to "hd44780_settings.h".
3. Set the values appropriate to your project in "hd44780_settings.h".
4. Add the hd44780.c to your project.
5. Put "#include "hd44780.h" in any of your C files that need to use the functions.

oooo...wat erg, schaamrood op mijn kaken, dit had ik natuurlijk zelf ook wel kunnen vinden.

ter verdediging, met die link van jou kwam ik op en "404 not found" pagina terecht. ik heb toen het www.circuitsonline gedeelte weg gegooid waarna ik in 1x keer de zipfile binnen kreeg zonder op de avrfreak site te komen.
zwak excuses, maar zo is het nou 1x gegaan.
ik ga dit snel proberen en laat hier nog wat weten.
in ieder geval bedankt.

edit: staat trouwens ook gewoon in het mee gedownloade textbestandje.

nog even en dan word ik gek :)

ik heb dus uiteraard de map gerenamed naar "hd44780_settings.h"

de mappen:
hd44780.h
hd44780.c
hd44780_settings.h
heb ik gecopieerd naar de map waar ook display-3.aps staat
(zo heet mijn programma) bij openen project in avrstudio klik ik deze aan en krijg ik mijn programma te zien. hier staat bovenaan: #include "hd44780.h"
in een schermpje links open ik: external dependencies
hier zie ik: hd44780.h en hd44780_settings.h staan (geen hd44780.c)
open ik: hd44780.h dan staat er boven aan in het programma: #include "hd44780_settings.h"
en open ik deze weer dan zie ik een lijstje waar ik mijn outputs kan wijzigen.

so far so good zou je denken, maar mijn hoofdprogramma diplay-3.c
kijkt gewoon niet naar: hd44780_settings.h ik moet nog gewoon in mijn hoofdprogramma de outputs zetten via DDRD om iets op mijn display te krijgen.

ik hoop dat iemand mij nog wil helpen,
@buckfast_beekeepe dank voor je inzet

Normaal is #include "hd44780.h" voldoende. Je moet wel een lcd_init(); en lcd_clrscr(); in je main plaatsen buiten je while lus. Heb je dat gedaan? Probeer dan de standaard "Hello World" op je display te krijgen met lcd_puts("Hello World...");.

Je moet dus steeds lcd_.... gebruiken om je display te manipuleren.

Post anders je code.

[Bericht gewijzigd door buckfast_beekeeper op (18%)]

morgenvroeg ga ik dat eens bekijken.

Compileert het wel?

Zo nee:
Heb je de hd44780.c wel aan je "Source Files" lijst toegevoegd?
Anders compileert het project niet: je krijg dan linker errors.
Uit deze lijst wordt namelijk intern de makefile gegenereerd.
(Atmel studio 4.19 gebruik ik in dit geval)

De "header files" lijst is eigenlijk alleen van belang voor de dependencies en het gemak dat je ze via deze navigator kunt openen.

hij compileert wel, als ik b.v. in lcd_settings.h opzettelijk een fout maak en ik compileer (build) in display-3 dan geeft hij die fout wel aan. voor mij het bewijs dat alles wel aan elkaar gelinkt is.
momenteel ben ik avrstudio4 op mijn laptop in de huiskamer aan het instaleren. ik moet anders alles testen in de schuur waar het nogal koud is.
zodra dat gebeurt is ga ik weer verder.

ik zoek nog even uit hoe ik de code in kleurtjes krijg.

thanks @ progger

wanneer ik dit compileer krijg ik de error:
../display-3.c:7: error: conflicting types for 'lcd_init'

ik denk dat de lcd_init 2x word gebruikt, wellicht in de 2 include bestanden. maar ik zie niet waar.


#include <avr/io.h>
#include <util/delay.h>


#include "hd44780.c"

lcd_init();
lcd_clrscr();


int main(void)
{

lcd_puts("Hello World...");

}

[Bericht gewijzigd door trix op (34%)]

<code=c></code>

en dan blokhaken gebruiken

#include "hd44780.h"?

Normaal wordt de header file include en niet de c file. Er wel voor zorgen dat hd44780.c en .h aan je project zijn toegevoegd.

inderdaad, maar dat had ik eigenlijk ook al geprobeerd met het zelfde resultaat.
ik heb de hd44780.c file in dezelfde map staan met display_3.aps
samen met de hd44780.h en de hd44780.settings.h
dat zie ik ook gewoon met de windows verkenner. alleen in het navigatie gedeelte van avrstudio vind ik hem niet terug.

Waar staat je c file met je main? Zet de 3 bestanden in dezelfde map. Heb je al geen gedonder met relatieve mappen.

Dan is het zaak zowel hd44780.h als hd44780.c aan te melden in je project. In studio 6 doe je dit door in 'solution explorer' rechts te klikken op de map van je main file. Als het goed is zie je dan ergens add > hier kan kiezen voor 'existing item'. Nu kan je de bewuste file(s) toevoegen.

ik heb even voor de duidelijkheid 2 printscreens gemaakt.

gebruik trouwens avrstudio 4.18.716

[Bericht gewijzigd door trix op (25%)]

Niet 100% zeker dat daar de fout zit, de init en de clrscr staan bij mij in de main.

Heb het project aangemaakt in studio4.14.

http://users.skynet.be/buckfast_beekeeper/CO/ScreenShot036_thumb.png
(klikbaar)

Zorg dat de configuratie opties correct staan.

Klik project en daarna op configuration options
http://users.skynet.be/buckfast_beekeeper/CO/ScreenShot028.png
Zorg dat onder andere de CPU snelheid correct zijn ingevuld.

http://users.skynet.be/buckfast_beekeeper/CO/ScreenShot029.png
Klik op OK.

Voeg nu de c en h file toe aan je project.
C-file
http://users.skynet.be/buckfast_beekeeper/CO/ScreenShot030.png

Links heb je de files in je project staan. Ga op Source Files staan en klik rechts. 'Add existing source file()...'

Kies in het openende scherm hd44780.c
http://users.skynet.be/buckfast_beekeeper/CO/ScreenShot031.png
Klik OK.

Doe hetzelfde met de header file
http://users.skynet.be/buckfast_beekeeper/CO/ScreenShot032.png

http://users.skynet.be/buckfast_beekeeper/CO/ScreenShot033.png

Gebruik deze code:
http://users.skynet.be/buckfast_beekeeper/CO/ScreenShot034.png

Deze code compileert bij mij correct.
http://users.skynet.be/buckfast_beekeeper/CO/ScreenShot035_thumb.png
(klikbaar)

tadaa....nu werkt het correct,

bij de configurations options was helemaal geen frequentie ingevuld.
de hd44780_settings.h bestand staat nu onder de headers en eerst onder de external dependencies.
de hd44780.c staat nu onder de source files en eerst ook onder de external dependencies.

nu eens kijken of ik een rotary encoder kan inlezen.

buckfast_beekeepe: nogmaals mijn dank voor je inzet en geduld.

Mooi dat het werkt.

Een rotary encoder is niet zo moeilijk. Een interrupt op encoder uitgang A. Controleren of uitgang B laag is. Indien dit zo is, wordt er met de klok mee gedraaid. Is uitgang B hoog wordt er tegen de klok gedraaid.

Ben nu niet thuis. Kan straks mijn exacte code posten.

Ik gebruik wel een optische encoder van bourns contactdender hoef ik dus niet weg te werken.

btw het is buckfast_beekeeper. De r valt spijtig genoeg weg.

edit:


// pin PD4 als ingang van rotary uitgang B
#define IS_ROTARY_B_LOW    ~PIND & (1 << PIND4)

// minimale waarde voor backlight PWM
static const char lcd_back_min = 35;
// maximale waarde voor backlight PWM
static const char lcd_back_max = 255;

// beginwaarde van het backlight. 
// volatile omdat waarde wordt aangepast 
// in interrupt
// beginnen op volle sterkte.
// in de toekomst wordt startwaarde toegekend 
// door opgeslagen waarde op te halen uit EEprom
volatile unsigned char volBtDim = 255; 

// interrupt handler
ISR(INT1_vect){
    // indien uitgang B nog laag is, draaien
    // met de klok mee. 
    if(IS_ROTARY_B_LOW && volBtDim < lcd_back_max){
        volBtDim++;
    }
    else if(volBtDim > lcd_back_min){
        volBtDim--;
    }
    // PWM waarde aanpassen
    OCR1A = volBtDim;
}

int main(void){
    // pull up PD3 (INT1 encoder uitgang A)
    // activeren
    PORTD |= (1 << PD3);

    // gebruik timer 1 omdat timer 0 al in gebruik is
    // timer 1 instellen PWM
    // backlight
    // Clear OCnA/OCnB on Compare Match 
    // (Set output to low level).
    // PWM mode 1 +- 560Hz
    TCCR1A = (1 << COM1A1) | (1 << WGM10);
    // prescaller 64
    TCCR1B = (1 << CS11) | (1 << CS10);
    // teller op 0
    TCNT1 = 0x00;
    // PWM startwaarde
    OCR1A = volBtDim;
    ORR1B = 0x00;

   // interrupts instellen
   EIMSK |= (1 << INT1);
   // INT1 op steigende flank. Als PD4 hoog is,
   // dan wordt tegen de klok gedraaid.
   EICRA = (1 << ISC10) | (1 << ISC11);

   while(1){
       // hier je programma
   }
}