Forum: Mikrocontroller und Digitale Elektronik ATmega16 und HD44780 in 4-Bit modus Hilfe!


von Oxy (Gast)



Lesenswert?

Servus,

Ich möchte gerne meinem ATmega16 mit einem HD44780 LCD zum laufen 
bringen.
Der Schaltplan ist so ausgerüsstet so das ich mit einen ISP der über 
einen MysmartUSB Mk2 daten überträgt.

Bis jetzt hab ich von einen kolleg eine 8-bit Version für den LCD 
benutzt. jetzt brauch ich leider einen Pin von den Anschluss zum LCD um 
eine PWM zu erzeugen (PB3). Weshalb ich den Display jetzt in 4-bit modus 
benutzen will. Leider bin ich noch ein anfänger was c code geht, und 
kann nur sachen umschreiben (und vllt ein paar eingänge ausgänge so 
ansteuern das ein paar LEDs leuchten).

Weil ich jetzt nicht so tief ins programm reinhängen will, hab ich eine 
LCD Library aussm netz geholt.

Ich habe schon die Source files und Header files ins programm 
reingemacht.
zusätzlich hab ich alle datein verändern und zu meine hardware angepasst 
(F_CPU, Ports, etc.)

Ich hab einen bild von solution damit man sehen kann wie ich das 
eingefügt habe.
>ist das so richtig?

der "Hauptprogrammtest.c" ist einfach nur ein kleines programm den ich 
geschrieben hab um den LCD zu testen.

Ich weiss jetzt nicht wie ich einen text zum lcd senden kann.

>Kann mir jemand verbesserungs vorschläge machen?

falls die infos nicht reichen bitte nur sagen. C:

Ich bedank mich in vorraus für eure antwort.

Gruß,

Oxycotton

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Du solltest dir zuerst deine Portaufteileung nochmal überlegen. Während 
du die zeit- und umschaltkritischen Signale mühselig mit Relais(!) 
umschaltest, verschwendest du zwei volle Ports für olle LED, die man 
bequem mit einem Port und einem Multiplex-Pin abhandeln könnte, maximal 
brauchst du noch zwei Transistoren.
Machs also umgekehrt, die LED teilen sich den Port und LCD/ISP bekommen 
was eigenes.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Oxy schrieb:
> Weil ich jetzt nicht so tief ins programm reinhängen will
So geht das nicht, das ist dir hoffentlich klar. Du musst schon 
wenigstens die Doku zum herkopierten Quellcode lesen. Und die steht 
schlimmstenfalls in ihm selber drin.

Oxy schrieb:
> Ich weiss jetzt nicht wie ich einen text zum lcd senden kann.
Nicht nur kopieren ist die Devise, sondern auch lesen und kapieren...
1
/*************************************************************************
2
Display character
3
Input:    character to be displayed
4
Returns:  none
5
*************************************************************************/
6
void lcd_putc(char c)
7
  {
8
    lcd_write(c,1);
9
  }
10
11
12
/*************************************************************************
13
Display string
14
Input:    string to be displayed
15
Returns:  none
16
*************************************************************************/
17
void lcd_puts(const char *s)
18
  {
19
    register char c;
20
21
    while ((c=*s++)) 
22
      lcd_putc(c);
23
  }

: Bearbeitet durch Moderator
von Peter D. (peda)


Lesenswert?


von Oxy (Gast)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:
> So geht das nicht, das ist dir hoffentlich klar. Du musst schon
> wenigstens die Doku zum herkopierten Quellcode lesen. Und die steht
> schlimmstenfalls in ihm selber drin.

sorry ich glaub du hast mich falsch verstanden, ich hab mir schon die 
Doku angeschaut, und wie man die buchstaben herbekommt versteh ich auch.
ich habe den code den du mir gegeben hast schon mit den LCD library den 
ich im anhang habe ausprobiert und da kommt dann der fehler der sich 
jetzt im anhang befindet.

von Oxy (Gast)


Lesenswert?

Matthias S. schrieb:
> Du solltest dir zuerst deine Portaufteileung nochmal überlegen.
> Während
ich hab den Schaltplan nicht ausgedacht sondern mein ausbilder, du 
kannst dich ja bei ihm beschwern wenn dir die Portaufteilung nicht 
gefällt.

> du die zeit- und umschaltkritischen Signale mühselig mit Relais(!)
das die Leitung durch die Relais gehen ist irrelevant weil der LCD schon 
in 8bit modus funktioniert hat. hab ich oben aber auch schon geschrieben 
aber danke.

> umschaltest, verschwendest du zwei volle Ports für olle LED, die man
> bequem mit einem Port und einem Multiplex-Pin abhandeln könnte, maximal
> brauchst du noch zwei Transistoren.
da geb ich dir recht, hätte man wirklich so machen könne. Wenn ich die 
wahl hätte, und das zu den zeitpunkt gewusst wo die platine gemacht 
worden ist, hätte ich auch was gesagt. aber es ist wie es ist.


> Machs also umgekehrt, die LED teilen sich den Port und LCD/ISP bekommen
> was eigenes.
Ich kann jetzt nichts mehr ändern weil dir platine schon fertig ist mit 
alle bauteile usw.
ich muss jetzt mit den schaltplan so klar kommen.

gruß,
Oxy

von Oxy (Gast)


Lesenswert?

so ich habe jetzt versucht den Code in meinen Main programm mit 
einzubinden, aber da kommt jetzt dieser fehler (siehe anhang) da steht 
das der lcd_write deklariert werden muss, was muss ich oben eingeben das 
es dann geht???


-OXY

von Oxy (Gast)


Angehängte Dateien:

Lesenswert?

sorry hier ist der anhang

-OXY

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Im Ernst:
Ich kann nicht hartlöten.
Daher würde ich mit meinem neuen Lötbrenner erst mal an ein paar kleinen 
Abfallstücken und Rohrstücken den Prozess und die Handhabung üben, bevor 
ich die Gasleitung in einem Haus zusammenlöte...

Du kennst dich mit dem Compiler nicht aus.
Du willst aber sofort das Monsterprojekt compilieren? Sowas nenne ich 
"Mutig!"

Warum übst du nicht einfach mal mit einfachen kleinen Projekten und 
blinkenden LEDs. Klar dauert das. Diesen Prozess nennt man "Lernen". Und 
wenn du dann verstehst, /was da wie, wo und vor Allem warum 
eingebunden werden muss, dann packst du das große Projekt an.

Oxy schrieb:
> so ich habe jetzt versucht den Code in meinen Main programm mit
> einzubinden
WIE hast du das "versucht"? Es war doch ganz oben schon mit 
eingebunden...

von Oxy (Gast)


Lesenswert?

Lothar M. schrieb:
> Im Ernst:
> Ich kann nicht hartlöten.
> Daher würde ich mit meinem neuen Lötbrenner erst mal an ein paar kleinen
> Abfallstücken und Rohrstücken den Prozess und die Handhabung üben, bevor
> ich die Gasleitung in einem Haus zusammenlöte...

Diese beispiele sind top

> Du kennst dich mit dem Compiler nicht aus.
> Du willst aber sofort das Monsterprojekt compilieren? Sowas nenne ich
> "Mutig!"
Bitte?

> Warum übst du nicht einfach mal mit einfachen kleinen Projekten und
> blinkenden LEDs. Klar dauert das. Diesen Prozess nennt man "Lernen". Und
> wenn du dann verstehst, /was da wie, wo und vor Allem warum
> eingebunden werden muss, dann packst du das große Projekt an.

ok, also ich habe dieses programm nur so zum spass geschrieben und 
wollte dann den LCD mit einbinden, das programm selber ist nicht das 
problem, aber das einbinden mit den LCD display ist das problem. du 
brauchst mir jetzt nicht sagen das ich schlecht bin, weil ich mit C nur 
seit 2 monate arbeite. also komm mal runter...

ich will nur den LCD in 4-bit modus zum laufen bekommen. mehr nicht.

ich habe alles getann aber ich weiss nicht warum das ganze jetzt nicht 
läuft.

with super friendly greetings,
OXY

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Oxy schrieb:
> also komm mal runter...
Dito.
Gut, nachdem das geklärt ist können wir weiter machen:

> ich will nur den LCD in 4-bit modus zum laufen bekommen. mehr nicht.
Ich will nur die Galseitung im Haus löten. Mehr nicht.

> ich habe alles getann aber ich weiss nicht warum das ganze jetzt nicht
> läuft.
Ja, das sage ich doch: du tust irgendwas, weißt aber nicht, ob die 
Richtung stimmt.

> aber ich weiss nicht warum das ganze jetzt nicht läuft.
Weil ausser dir keiner weiß, WAS du "alles" getan hast, kann dir 
keiner helfen. Ist irgendwie klar...
Es weiß auch keiner, WO denn jetzt diese implizite Deklaration passiert. 
Man sieht nur dass du da irgendein Problem hast.

Oxy schrieb:
> so ich habe jetzt versucht den Code in meinen Main programm mit
> einzubinden
Hast du die lcd_puts() aus der hd44780.c in dein Hauptprogramm 
rüberkopiert?

> weil ich mit C nur seit 2 monate arbeite.
Du bist nicht der einzige. Das hat jeder durchgemacht, der heute C 
programmiert...

: Bearbeitet durch Moderator
von Oxy (Gast)


Lesenswert?

> Oxy schrieb:
>falls die infos nicht reichen bitte nur sagen.

Wenn sie lesen können, hättest du diesen Satz gesehen (erster post).

Ich hab das geschrieben damit wenn es noch fragen gibt oder irgend was, 
was ich bisher gesagt hab fehlt, das sie das mir dann sagen damit ich 
schnell eine Lösung finden kann.

Ich hab mittlerweile das Problem alleine gelöst.

ich hab den LCD-library falsch mit den Hauptprogramm gebunden.

und genau das wollte ich wissen, ob ich den LCD-library falsch gebunden 
hab.

danke nochmal für die werde ich in der Zukunft benutzen wenn ich jemand 
nerven will.

Gruß,
OXYCOTTON

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Oxy schrieb:
> ich hab den Schaltplan nicht ausgedacht sondern mein ausbilder, du
> kannst dich ja bei ihm beschwern wenn dir die Portaufteilung nicht
> gefällt.

Von einem Ausbilder hast du bis dato nichts erzählt. Viel Spass noch.

von Oxy (Gast)


Lesenswert?

Matthias S. schrieb:

> Von einem Ausbilder hast du bis dato nichts erzählt. Viel Spass noch.

???????????????????


OXY

von S. R. (svenska)


Lesenswert?

Frag deinen Ausbilder, der wird dafür bezahlt.
(Mehr meinte Matthias nicht.)

: Bearbeitet durch User
von Oxy (Gast)


Lesenswert?

Er ist im Urlaub...also fragen geht gut


OXY

von Karl H. (kbuchegg)


Lesenswert?

Du programmierst seit 2 Monaten C und hast noch immer keine Ahnung wie 
man ein Projekt aus mehereren Source Code Dateien aufbaut, bzw. wie 
grundlegende Syntax-Elemente von C funktionieren?
1
int main(void)
2
{
3
  DDRA = 0xFF;        //Port A als Ausgang für LEDs
4
  DDRC = 0xFF;        //Port C als Ausgang für LEDs
5
  DDRD |= (0<<PD4);      //Taster-Umschalter Eingang
6
  DDRD |= (1<<PD5);      //RS ausgang
7
  DDRD |= (1<<PD6);      //R/W ausgang
8
  DDRD |= (1<<PD7);      //E ausgang  
9
  DDRB = 0xF0;        //Port B als Ausgang
10
  PORTA = 0x00;        //LEDs auf null gesetzt.
11
  PORTC = 0x00;        //LEDs auf null gesetzt.
12
  RS = 0;
13
  
14
void lcd_init();  
15
void lcd_clrscr();
16
void lcd_putc(char c)
17
{
18
  lcd_write(c,1);
19
}  
20
21
  while(1)

Na bumm.
Schönenn Gruss an deinen Ausbildner. Er soll dir erst mal ordentliche 
Literatur kaufen.

von Karl H. (kbuchegg)


Lesenswert?

Da
1
/*
2
 * lcdtastertest4bitmodus.c
3
 *
4
 * Created: 31.08.2015 10:00:55
5
 *  Author: Mar
6
 */
7
8
#define F_CPU 4000000
9
#include <avr/io.h>
10
#include <util/delay.h>
11
#include <stdio.h>
12
#include <G:/mikcrocontrollerkurs/cprogramming/lcdtastertest4bitmodus/lcdtastertest4bitmodus/lcdtastertest4bitmodus/lib/lcd/hd44780.h>

du hast doch den #include für das Header File mit den Protoypen für die 
LCD Funktionen. Was fummelst du dann noch selber irgendwelchen Code 
rein?

Lass deine "Ergänzung" aus dem main schleuigst wieder verschwinden.

PS: einen noch längeren und noch umständlicheren Pfadnamen zum Header 
File hast du dir nicht ausdenken können?

von Karl H. (kbuchegg)


Lesenswert?

Oxy schrieb:

> Ich weiss jetzt nicht wie ich einen text zum lcd senden kann.

Na wie wohl?
Indem du die entsprechenden Funktionen aufrufst
1
.....
2
3
4
int main()
5
{
6
   lcd_init();
7
8
    lcd_puts( "Hallo" );
9
...

>>Kann mir jemand verbesserungs vorschläge machen?

Ja. Kauf dir ein C Buch. Dein Ausbildner ist offenbar eine Niete, wenn 
du nach 2 Monaten immer noch nicht Funktionsaufrufe von Protoypen 
unterscheiden kannst.

von Oxy (Gast)


Lesenswert?

Karl H. schrieb:
> Ja. Kauf dir ein C Buch. Dein Ausbildner ist offenbar eine Niete, wenn
> du nach 2 Monaten immer noch nicht Funktionsaufrufe von Protoypen
> unterscheiden kannst.

naja der meinung bin ich auch...da stimm ich zu.

OXY

von Oxy (Gast)


Lesenswert?

Karl H. schrieb:

du hast bei den meisten sachen recht, was ich vielleicht noch sagen 
sollte ist das ich erst seit 3 jahre in deutschland lebe. hab mein 
ganzes leben im ausland gewohnt. hauptsache ist, du kannst mich zum teil 
verstehen und damit bin ich erst mal zufrienden.


OXY

von Oxy (Gast)


Lesenswert?

es ist gut zu wissen das man so beleidigt werden kann wenn das programm 
schon läuft.

Ich hab den LCD in 4 bit modus zum laufen gebracht..dank deine..oh warte 
ich hab das jetzt alles selber hin bekommen.

Ein tip für zukünftige posts:

weniger beleidigen, mehr helfen.

OXY

von Karl H. (kbuchegg)


Lesenswert?

Oxy schrieb:

> ist das ich erst seit 3 jahre in deutschland lebe. hab mein
> ganzes leben im ausland gewohnt.

Das hat damit nichts zu tun.

Literatur zur Programmiersprache C gibt es in vielen Sprachen. Wenn alle 
Stricke reissen, dann gibt es immer noch die Originale, die meistens auf 
Englisch sind.
Ohne grundlegende Literatur wirst du nicht weit kommen. Literatur zum 
Thema "Wie funktioniert die Programmiersprache C" und nicht nur 
"Mikrocontroller Grundkurs mit einem minimalen Anhang über C".

Und ja. Es ist völlig normal, dass sich bei dir die Bücher anfangen 
werden zu stapeln. Da musst du durch. Programmieren ist anspruchsvoller 
als alles andere was du jemals gemacht hast.

von Karl H. (kbuchegg)


Lesenswert?

Oxy schrieb:

> Ein tip für zukünftige posts:
>
> weniger beleidigen, mehr helfen.

Ein Tip für zukünftige Postings:
mehr selber lernen und weniger auf Grundlagenhilfe aus einem Forum 
vertrauen.


Ja, klar. Du hast das selber hinbekommen.
Du verzweifelst seit 1 1/2 Tagen daran, wie man Funktionen aufruft, aber 
du hast das selber hinbekommen :-)

: Bearbeitet durch User
von Oxy (Gast)


Lesenswert?

Naja da gibt es so ein spruch, der ist top.


> "Wer kann, Der kann" - ?



mit Freundlichen Grüßen,
OXY

von Rudolph R. (rudolph)


Lesenswert?

Mir fällt da noch der Begriff "Beratungs-resistent" ein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.