Forum: Mikrocontroller und Digitale Elektronik LCD-Display & Schwarze Balken


von Marcel S. (Gast)


Angehängte Dateien:

Lesenswert?

Habe leider keine Zeit mehr gerade deshalb fasse ich mich kurz. Ich 
möchte mit meinem ´Mikrocontroller ein LCD - Display ansteuern aber 
leider tauschen trotz initialisierungs Befehl nur schwarze Balken auf. 
Auch wie häufig beschrieben mit Kontrast rumspielen habe ich schon 
versucht. Bin ein ziemlicher Anfänger und ich weiß, dass diese Frage 
schon oft gestellt wurde aber ich habe ncihts gefunden was mr weiter 
hilft. Jedenfalls nichts in C.
Danke! Meine verwendeten Dateien sind im Anhang...sind die aus dem 
mikrocontroller.net LCD GCC Tutorial...

von tt2t (Gast)


Lesenswert?

RICHTIG Initialisiert ??? -> http://sprut.de/electronic/lcd/

von Marcel S. (Gast)


Lesenswert?

danke für die Seite, aber so richtig verstehe ich das nicht was das 
bedeuten soll. Vor allem Begriffe wie PD0 oder PD1...ich weiß was ein 
Port ist, aber mit diesen Begrifflichkeiten Pinx, PDx, Register und Bit 
komme ich iwie noch nicht klar. Mir ist einfach der Unterschied nicht 
klar. Ich denke das es daher eher was mit der Belegung in lcd-routines.h 
zu tun hat. Ich wäre froh wenn mir jemand die Begrifflichkeiten klar 
machen könnte und mir ein Tipp gibt, warum das LCD nicht initialisiert 
wird!

von holger (Gast)


Lesenswert?

Leg die RW Leitung vom Display mal fest an Masse
oder setze den Pin wo du sie angeschlossen hast auf 0.

von Spess53 (Gast)


Lesenswert?

Hi

>Auch wie häufig beschrieben mit Kontrast rumspielen habe ich schon
>versucht.

Wie? In deinem Schaltbild liegt die Kontrastspannung über R25 an Masse.

MfG Spess

von tt2t (Gast)


Lesenswert?

>> Auch wie häufig beschrieben mit Kontrast rumspielen habe ich schon
>> versucht.
> Wie? In deinem Schaltbild liegt die Kontrastspannung über R25 an Masse.

Wenn er schwarze Balken sieht, dürfte der Kontrast ok sein.

von Karl H. (kbuchegg)


Lesenswert?

Spess53 schrieb:

> Wie? In deinem Schaltbild liegt die Kontrastspannung über R25 an Masse.

Dafür liegen D0 - D3 ebenfalls an Masse, was das LCD freuen wird.



Im Ernst.
Es wird wieder mal das übliche sein. Das LCD ist vom Timing her ein 
wenig zu knapp.

von Karl H. (kbuchegg)


Lesenswert?

tt2t schrieb:

> Wenn er schwarze Balken sieht, dürfte der Kontrast ok sein.

Kommt drauf an.
Zu sehr aufgedreht macht auch schwarze Balken.

von Marcel S. (Gast)


Lesenswert?

Hat nun einer eine gute Idee? Liegt es an der Schaltung oder am Code?

von 12345 (Gast)


Lesenswert?

Schwarze Balken sind Mist.
Ich hatte vor einige Wochen auch das Problem.

Der Kontrast-Pin liegt einfach auf Masse?!
Da sollten etwa 1.0 - 1.4 Volt zu messen sein, dann verschinden die 
schwarzen Balken und erst dann wirst du erkennen ob dein Code 
funktioniert.

von Hubert G. (hubertg)


Lesenswert?

Wofür ist das 10k Poti in deiner Schaltung? Die Hintergrundbeleuchtung 
wirst du damit kaum einstellen können.
Hast du einen oder zwei schwarze Balken?

von Marcel S. (Gast)


Lesenswert?

Also mir wurde gesagt der Poti ist für den Kontrast, was anscheinend ja 
nicht stimmt. Die Schaltung hat mein Elektrotchnik Lehrer gebastelt 
hm...anscheinend ist der ja nicht so der "bringer". Also liegt es an der 
Kontrastsache? wie könnte ich das lösen?
Oder doch etwas anderes evtl Softwaretechnisches? falsche PD iwas 
Belegung vllt oder so?

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Also mir wurde gesagt der Poti ist für den Kontrast, was anscheinend ja
> nicht stimmt.

Da ist aber was gewaltig schief gelaufen.

grundsätzlich solltest du "mir wurde gesagt" immer selbst überprüfen. 
Rund 70% aller Fehler-Anfragen hier im Forum werden dadurch gelöst, dass 
wir eben nicht dem glauben was der Fragesteller so von sich gibt, 
sondern indem wir die Dinge selber überprüfen bzw. Schaltplan und/oder 
Code anfordern. Und dann stellen sich die Dinge erschreckend oft als 
dann doch ganz anders heraus, als sie mit Prosa beschrieben wurden.

> Die Schaltung hat mein Elektrotchnik Lehrer gebastelt
> hm...anscheinend ist der ja nicht so der "bringer". Also liegt es an der
> Kontrastsache? wie könnte ich das lösen?

Welcher Pin vom LCD ist der Kontrast-Pin?
Wo muss daher das Poti seine einstellbare Spannung abliefern?

AVR-Tutorial: LCD

von Hubert G. (hubertg)


Lesenswert?

Das Poti ist definitiv für die Hintergrundbeleuchtung, die liegt auf Pin 
15,16 des LCD. Als Vorwiderstand für die Hintergrundbeleuchtung ist ein 
Widerstand, je nach gewünschter Helligkeit <100 Ohm notwendig. Da sollte 
man aber immer im Datenblatt nachsehen da sehr unterschiedlich.
Der Kontrast wird auf Pin3 des LCD eingestellt.
Nimm den R25 heraus, trenne die Verbindung vom Poti zum Pin15 und stelle 
eine Verbindung vom Poti zum Pin3 her. Dann hast du eine korrekte 
Kontrasteinstellung.

von Marcel S. (Gast)


Lesenswert?

okay danke erstmal! Ich werde das ausprobieren sobald ich gegen 18 Uhr 
zuhause bin...ich hoffe in paar von euch schauen nachher nochmal vorbei! 
Ich werde aufjedenfall Rückmeldung geben ob es dann funktioniert.

von 12345 (Gast)


Lesenswert?

wer weiß was dein Lehrer da für ein Display ansteuern will...

von holger (Gast)


Lesenswert?

>Hat nun einer eine gute Idee? Liegt es an der Schaltung oder am Code?

Beides. Wie bereits gesagt: Der RW Pin vom Display hängt in der Luft.

von Marcel S. (Gast)


Lesenswert?

Okay, Kontrast ist Pin 3 das hab ich jetzt :D
Was hat es mit dem RW auf sich und wie kann ich das Problem beheben bzw. 
kann mir da jemand noch einmal genauer ausführen was damit los ist? Ich 
soll also Pin 5 an Masse legen wenn ich das richtig verstanden 
habe...wie bewerkstellige ich das?

von Hubert G. (hubertg)


Lesenswert?

Abgesehen vom R/W-Pin funktioniert dein Code.
Den R/W-Pin kannst du auch über die SW auf GND legen.

von Marcel S. (Gast)


Lesenswert?

Finde nichts das "SW" heißt :(
Klär mich bitte auf...wie mache ich das am besten? mit einer Brücke oder 
so? Bin noch recht frisch in der Praxis :P

von Hmm (Gast)


Lesenswert?

"SW" ist eine Abkürzung für "Software".

Die Aussage:
>Den R/W-Pin kannst du auch über die SW auf GND legen.
sollte also bedeuten, das Du den R/W-Pin auch per Software, per Programm 
auf Ground legen kannst. In den Begriffen von C bzw. Assembler ist das 
eine 0.

Die andere Möglichkeit ist: per Hardware.
Ob das nun als eine Brücke oder eine Leiterbahn realisiert ist, ist 
völlig nebensächlich. Hauptsache ist, das eine "leitende Verbindung" 
zwischen Ground und dem R/W-Pin hergestellt wird.

von Marcel S. (Gast)


Lesenswert?

Das erklärt einiges :D
dann werde ich das lieber Softwaretechnisch lösen. Dürfte doch eig. eine 
Art Einzeiler sein? Wo formuliere ich das in meinen Dateien und vorallem 
wie?

von Hubert G. (hubertg)


Lesenswert?

1
#include <avr/io.h>
2
#include "lcd-routines.h"
3
4
int main(void)
5
{
6
7
DDRD=(1<<DDD6);
8
PORTD&=~(1<<PD6);
9
  lcd_init();
10
  lcd_data( 'T' );
11
  lcd_data( 'e' );
12
  lcd_data( 's' );
13
  lcd_data( 't' );
14
  
15
  lcd_setcursor( 0, 2 );
16
  
17
  lcd_string("Hello World!");
18
  
19
  while(1)
20
  {
21
  }
22
  
23
  return 0;
24
}
Ich nehme an das dein R/W auf PortD6 liegt.

von Marcel S. (Gast)


Lesenswert?

alles liegt an Port D xD
was genau hast du nun dort gemacht?
Also was die zwei Zeilen nun genau machen ;)
Dann kann ich das nächste  mal auch ;P

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> alles liegt an Port D xD
> was genau hast du nun dort gemacht?
> Also was die zwei Zeilen nun genau machen ;)
> Dann kann ich das nächste  mal auch ;P


Spätestens jetzt ist der Verweis aufs AVR-GCC-Tutorial angebracht.

Dein Frage ist ungefähr so wie: Ich möchte mich in der Mathematik mit 
Trigonometrie beschäftigen, kann mir wer erklären, wie man 2 Zahlen 
miteinander multipliziert. Das soll jetzt kein Vorwurf sein oder so.

Aus gutem Grund ist das "Hallo world" der µC-Technik die blinkende LED. 
Denn dazu muss man bereits Portpins gezielt schalten können. Das ist 
sozusagen die Basis alles weiteren. LCD kommt später. Viel später.

von Marcel S. (Gast)


Lesenswert?

Habe den oben stehenden Code von Hubert genommen und das hier 
durchgeführt:

Nimm den R25 heraus, trenne die Verbindung vom Poti zum Pin15 und stelle
eine Verbindung vom Poti zum Pin3 her. Dann hast du eine korrekte
Kontrasteinstellung.

Wenn ich jetzt am Poti drehe, bekomme ich in der einen Richtung voll 
aufgedreht schwarze Balken, in die andere ist der Bildschirm ganz Hell 
als wäre die Hintergrundbeleuchtung ein und solange er nicht in einer 
Richtung voll ausschlägt ändert sich rein gar nichts. Laut dem Code 
sollte ja dort eigentlich etwas stehen.

Was kann nun noch falsch sein? Bin wirklich ratlos :/

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:

> Wenn ich jetzt am Poti drehe, bekomme ich in der einen Richtung voll
> aufgedreht schwarze Balken, in die andere ist der Bildschirm ganz Hell

passt.
Jetzt stellst du den Regler so ein, dass die erste Zeile schwarze 
Kästchen anzeigt. Und zwar so, dass du saubere satte schwarze kleine 
Quadrate siehst und die Zwischenräume noch nicht zu dunkel sind. Die 
zweite Zeile sollte sich noch nicht geschwärzt haben.
Das ist eine Grundeinstellung für den Kontrast, mit der du etwas sehen 
müsstest (wenn dann das erste mal Zeichen aufs LCD kommen). Die genaue 
Feinabstimmung nimmst du dann vor, wenn das erste mal Text auf dem LCD 
ist.

> Richtung voll ausschlägt ändert sich rein gar nichts. Laut dem Code
> sollte ja dort eigentlich etwas stehen.

Na ja.
Noch ist ja nicht alles erledigt.
Was hast du mit dem R/W Pin vom LCD gemacht?

von Karl H. (kbuchegg)


Lesenswert?

Welches LCD ist das überhaupt?

von Marcel S. (Gast)


Lesenswert?

Ich habe nur das hier:

DDRD=(1<<DDD6);
PORTD&=~(1<<PD6);

in den Code eingefügt. Ich kann soviel drehen wie ich will da kommen 
keine Zeichen :(

von Marcel S. (Gast)


Lesenswert?

Genaue Daten kenne ich nicht. Ich weiß nur, dass es 2x16 und im 4 bit 
Betrieb ist...

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:

>
> DDRD=(1<<DDD6);
> PORTD&=~(1<<PD6);
>
> in den Code eingefügt. Ich kann soviel drehen wie ich will da kommen
> keine Zeichen :(

Das hat auch erst mal damit nichts zu tun. Die Kontrasteinstellung ist 
nur deswegen wichtig, weil du bei grob verstelltem Kontrast nämlich gar 
nichts sehen wirst. Aber wenn der so ungefähr passt, dann reicht das 
fürs erste.

Mal eine ganz andere Frage:
Hast du eigentlich auf deinem µC schon mal irgendwas anderes laufen 
lassen? Sprich: Ist sicher gestellt, dass der µC überhaupt funktioniert 
und du Programme darauf brennen kannst?

von Marcel S. (Gast)


Lesenswert?

Ich hoffe einer hat noch eine Idee! Als ich das ganze mit meinem Lehrer 
durchging meinte er, dass das LCD Display die gleiche Pin Belegung wie 
die hier in den Tutorials genannte hat. Also:

1   VSS   GND
2   VCC   +5 V
3   VEE   GND oder Poti
4   RS   PD4 am AVR
5   RW   GND
6   E   PD5 am AVR
7   DB0   nicht angeschlossen
8   DB1   nicht angeschlossen
9   DB2   nicht angeschlossen
10   DB3   nicht angeschlossen
11   DB4   PD0 am AVR
12   DB5   PD1 am AVR
13   DB6   PD2 am AVR
14   DB7   PD3 am AVR
15   A   Vorsicht! Meistens nicht direkt an +5 V abschließbar,
sondern nur über einen Vorwiderstand, der an die Daten
der Hintergrundbeleuchtung angepasst werden muss.
16   K   GND

von Marcel S. (Gast)


Lesenswert?

Also zum Einstieg hatte ich einfach 8 LEDs mit denen ich rumprobieren 
konnte. Das lief auch alles. Ich programmiere in Atmel Studio 6 und 
benutze den Avr Dragen um das Programm aufzuspielen. Klappt also alles 
soweit :)

von Karl H. (kbuchegg)


Lesenswert?

Und wie sieht eigentlich die Gegenstelle am Kabel aus?
Welche Anschlussbelegung hast du den dort von den Pins zum Kabel?

Bisher haben wir das alles ja nur geraten.

von Marcel S. (Gast)


Lesenswert?

Ich verstehe nicht ganz genau was du meinst. Also oben ist der 
Schaltplan xD
Sonst musst du mir das kurz erklären was du meinst.

von Hubert G. (hubertg)


Lesenswert?

Das ist der Plan in dem du das LCD anschließt. Wie sieht die andere 
Seite des Kabel aus, was für ein µC, ich habe einen Mega8 zum testen 
verwendet.

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Ich verstehe nicht ganz genau was du meinst. Also oben ist der
> Schaltplan xD

Der hilft mir aber nix, wenn ich kontrollieren will, welcher Anschluss 
vom LCD zu welchem µC-Pin geht.

Denn kurioserweise hat dein Stecker die Beschriftung '1' (also den 
ersten Pin) dort, wo wir alle hier Bit 7 vom Port vermuten. Das kann 
natürlich so gewollt sein. Aber bei der Fehlersuche heißt es erst mal: 
Alles wird überprüft.

von Marcel S. (Gast)


Lesenswert?

Also die eins bzw. der Pfeil am Stecker ist dort wo die eins steht. 
Dieser geht dann auf den gleichen Stecker am µC. Nur was genau muss ich 
jetzt tun damit wir die Infos kriegen? Bin ein wenig verwirrt sry

von Karl H. (kbuchegg)


Lesenswert?

Na ja.
Wenn du einen Durchgangsprüfer am LCD auf DB4 hältst und mit dem anderen 
Ende des Durchgangsprüfers am µC die Pins abfährst, bei welchem Pin am 
µC piepst es denn?


Ich will doch nur wissen, ob die Zuordnung, dass der Ausgang PORTD/PD0 
zum LCD-Anschluss DB4 auch wirklich und tatsächlich stimmt.

Weder du, noch dein murxender Lehrer haben in mir das Vertrauen 
aufgebaut, dass ich mich darauf verlassen kann, dass das auch 
tatsächlich so ist. Dein Lehrer nicht mit dem Murx den er geliefert hat 
und du nicht, weil du solche Dinge eigentlich wissen solltest, wenn du 
eine (DEINE!) Schaltung aufbaust.

von Marcel S. (Gast)


Lesenswert?

Puh tut mir echt leid...ich habe leider noch nicht soviel ahnung von dem 
allem. Hab jetzt den Durchgangsprüfer musst mir nur sagen wo ich PD0 
finde

von holger (Gast)


Lesenswert?

>Hab jetzt den Durchgangsprüfer musst mir nur sagen wo ich PD0
>finde

Welchen Prozessor benutzt du?

von Hubert G. (hubertg)


Lesenswert?

PD0 ist beim ATmega8 auf Pin 2
beim ATmega16/32 auf Pin 14
Was hast du für ein Board auf dem der KOntroller sitzt? Foto?

von Karl H. (kbuchegg)


Lesenswert?

Marcel.

Für jeden µC gibt es ein DATENBLATT!
Da ist eine Zeichnung drinnen, aus der die Pinzuordnung hervorgeht.

Du brauchst das Datenblatt! Ohne kann man nicht programmieren!

von Marcel S. (Gast)


Lesenswert?

Also auf dem großen IC oder Prozessor steht:
ATmega32
16PU
0950D

von Marcel S. (Gast)


Lesenswert?

Also mit dem 11 Pin also DB4 bekomme ich nirgends ein piepsen

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Also mit dem 11 Pin also DB4 bekomme ich nirgends ein piepsen

Solltest du aber.
Dann musst du dem mal nachgehen, wo das alles verschwindet.
Hast du am Kabelanschluss (auf der LCD Platine) noch ein piepsen. Hast 
du am anderen Ende des Kabels noch ein Piepsen. Wenn ja, an welchem Pin? 
Dort muss eine Leiterbahn wegführen - wo geht die hin?


Mach doch bitte endlich mal ein Foto, auf dem dein kompletter Aufbau 
ersichtlich ist.

von Hubert G. (hubertg)


Lesenswert?

Dann verfolge doch mal die Leitung wohin sie geht.
Foto oder Beschreibung des Boards wäre nicht schlecht.

von holger (Gast)


Lesenswert?

>Also mit dem 11 Pin also DB4 bekomme ich nirgends ein piepsen

Und was ist mit Pin 12? Also DB5 der an PD1 gehen müsste. Das ist der 
Pin15
am ATMega32.

Komisch das da am ATMega32 RxD und TxD vom Display
belegt werden. Keine gute Idee.

von Karl H. (kbuchegg)


Lesenswert?

holger schrieb:

> Komisch das da am ATMega32 RxD und TxD vom Display
> belegt werden. Keine gute Idee.

Wollen wirs hoffen, dass das ganze steckbar ist.
Denn genau da liegt meine Vermutung: Ein Dreher im Flachbandkabel bzw. 
in den Steckern/Buchsen.

von Marcel S. (Gast)


Angehängte Dateien:

Lesenswert?

war gerade dabei ein Foto zu machen :) werde die Verbindung mal genauer 
checken. Irgendwelche anderen Fotos nötig xD?

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> war gerade dabei ein Foto zu machen :) werde die Verbindung mal genauer
> checken. Irgendwelche anderen Fotos nötig xD?

Das µC-Board von unten.
Noch besser wäre allerdings ein Schaltplan.
Ideal wäre beides.

von Marcel S. (Gast)


Angehängte Dateien:

Lesenswert?

okay habe jetzt doch ein piepser...bei dem zweiten Bild: Linke Reihe 
dort der dritte Pin von oben

von Axel R. (Gast)


Lesenswert?

mach doch mal richtig Licht an im Zimmer und schiesse ein, zwei scharfe 
kleine Bilder. Bekommst Du die Überprüfung deiner Anschkussbelegung 
selbst hin?

(spannend hier)

Viel Erfolg

Axelr.

von Marcel S. (Gast)


Lesenswert?

Heller krieg ichs nicht sry hab schon Licht an :D wenigstens das bekomme 
ich hin jup :D

von holger (Gast)


Lesenswert?

Links ist ein Quarz zu sehen.
Ich glaube nicht das der uC wie in der lcdroutines.h
angegeben mit 1MHz läuft.

Ändere das

#ifndef F_CPU
#define F_CPU 1000000
#endif

mal in

#ifndef F_CPU
#define F_CPU 16000000
#endif

von Karl H. (kbuchegg)


Lesenswert?

OK. Dort geht eine Bahn weg.
Wo führt die hin?
Sieht so aus als ob die zu einem Jumperfeld gehen würde. Stimmt das? Ist 
dort ein Jumper gesetzt?
Letztendes muss die Bahn bis zum µC durchgehen. Auf welchem Pin am µC 
kommt die raus.


Und mal ganz ehrlich: Deine Photos sind eine Zumutung.
Wir sollen hier für dich deine Hardware anaylsieren und deine Photos 
sind unter aller Sau.
Falls du es immer noch nicht begriffen hast: Wir hier, auf der anderen 
Seite des Bildschirms, wir arbeiten DEINE Schaltung durch - die DU 
eigentlich kennen solltest. Und du wirfst uns dann auch noch Prügel 
zwischen die Beine. Ehrlich - ich bin kurz davor alles hinzuschmeissen.

von Axel R. (Gast)


Lesenswert?

HA: Als ob ichs geahnt hätte...

Wie man am Zeitstempel sieht, überschneiden sich die unschafren 
Pixelhaufen mit meinem Posts. ;) sehr geil.

LICHT AN! Makroaufnahme aktivieren. usw. Das wird schon.

Du musst zugeben, das man nichts erkennen kann.

Axelr.

von Marcel S. (Gast)


Lesenswert?

Tut mir Leid ich weiß das wirklich sehr zu schätzen das ihr mir hier 
soviel helft und finde das wirklich super! Ich bin nur wirklich 
absoluter Neueinsteiger in dieser ganzen Sache und mir ist klar das das 
sicher nerven muss wenn ich das hier nicht so kapiere :D
Ich werde bessere Fotos machen allerdings wird es ein paar mins dauern, 
da ich erst die Batterien meiner richtigen Kamera aufladen muss.

von Karl H. (kbuchegg)


Angehängte Dateien:

Lesenswert?

Fragen

von holger (Gast)


Lesenswert?

Was steht auf dem Quarz drauf?
Das ist das silberne Teil da links knapp unter der Mitte vom uC.

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:

> absoluter Neueinsteiger in dieser ganzen Sache und mir ist klar das das
> sicher nerven muss wenn ich das hier nicht so kapiere

Aber selbst dir muss klar sein, dass es eine elektrische Verbindung 
geben muss, damit Strom fliessen kann. Sonst können wir die ganze Sache 
auch gleich bleiben lassen.

Aus dem Datenblatt des Mega32 entnimmt man
http://www.atmel.com/Images/doc2503.pdf
das PD0 der Pin mit der Nummer 14 ist - also zählt man die halt einfach 
mal am realen IC ab. Den IC so hinlegen, dass die Kerbe an der 
Schmalseite in die richtige Richtung zeigt (wie im Datenblatt) und Pins 
zählen.

Und von dort muss es eine elektrische Verbindung bis zum Pin 11 des LCD 
(vulgo DB4) geben. Ob da jetzt Jumper, Kabel, Stecker, Buchsen 
dazwischen liegen, interessiert keinen, denn das sind so gesehen einfach 
nur steckbare Verbindungen. Wichtig ist das Verbindungspärchen DB4 - PD0 
und das es da einen elektrisch durchgehenden Pfad gibt. Denn genau das 
ist die Aussage der Tabelle
1
...
2
6    E   PD5 am AVR
3
7    DB0   nicht angeschlossen
4
8    DB1   nicht angeschlossen
5
9    DB2   nicht angeschlossen
6
10   DB3   nicht angeschlossen
7
11   DB4   PD0 am AVR
8
12   DB5   PD1 am AVR
9
13   DB6   PD2 am AVR
10
14   DB7   PD3 am AVR
11
...

Wenn der Mega am Pin PD0 wackelt, muss das LCD das am seinem Pin 11 
'sehen' können.
Und da das so sein muss, kann man das auch überprüfen!

von Axel R. (Gast)


Lesenswert?

> was ist das?

Sieht danach aus, als wenn man die Portpins mitels Jumper von der 
Sockelleiste trennen kann. Einige Jumper sind ja gesteckt...

von Karl H. (kbuchegg)


Lesenswert?

Axel R. schrieb:
>> was ist das?
>
> Sieht danach aus, als wenn man die Portpins mitels Jumper von der
> Sockelleiste trennen kann. Einige Jumper sind ja gesteckt...

Ich bin mir eben nicht sicher was das sein könnte.
Das Pinout auf der Lötseite sieht seltsam aus. 3 Pads nebeneinander, 
wobei die Leitung zum µC anscheinend aussen ist. Hmmm

von meinereiner (Gast)


Lesenswert?

Täusche ich mich oder fehlt der Jumper für Pin 14?
Hoffentlich kommen da bald mal gescheite Fotos rüber!

von Axel R. (Gast)


Lesenswert?

Das wird schon werden, nur Geduld ;)

von Marcel S. (Gast)


Angehängte Dateien:

Lesenswert?

DIe Fotos waren leider zu groß, die Seite ist immer abgesürzt beim 
hochladen...musste die Qualität bisschen runterschrauben...besser krieg 
ich die blöden Fotos nicht hin

von Barney G. (fuzzel)


Lesenswert?

Jetzt ist mir auch klar warum alle ein EiFon 3G haben muessen. Naemlich 
damit man auf den Bildern nichts erkennen kann.

von Marcel S. (Gast)


Lesenswert?

Das hilft mir jetzt auch nicht unbedingt weiter :D

von Karl H. (kbuchegg)


Lesenswert?

Was'n das für ein 'integrierter' 4-er Jumper Block, der um 2 Positionen 
versetzt aufgesteckt ist :-)

Auf jeden Fall sind die beiden ersten beiden Jumperpositionen nicht 
gebrückt. Logisch, dass da die beiden Datenleitungen nicht durchkommen.


(Hat mich ein wenig Puzzlearbeit gekostet, jetzt Vorderseite und 
Rückseite in übereinstimmung zu bringen. Aber: Mit diesen Photos kann 
man arbeiten :-).

von Marcel S. (Gast)


Lesenswert?

Okay das ist ja ein Fortschritt xD
Wenn die Datenleistungen blockiert werden, muss ich den Jumper 
entfernen, ihn anders aufstecken oder gar einen anderen Port benutzen?

von Axel R. (Gast)


Lesenswert?

Marcel S. schrieb:
> Okay das ist ja ein Fortschritt xD
> Wenn die Datenleistungen blockiert werden, muss ich den Jumper
> entfernen, ihn anders aufstecken oder gar einen anderen Port benutzen?

Die Leitungen sind nicht blockiert, sie sind unterbrochen...
Also: Jumper drauf stecken, damit die sie wieder verbunden sind.
Alle Leitungen müssen vom uC zum Display verbunden sein. Welche das 
sind, wurde ja oben schon beschrieben.

von Karl H. (kbuchegg)


Lesenswert?

Und dann hoffen wir mal, das das alles war.
Sicherheitshalber ALLE Leitungen dann nochmal durchklingeln. Da darf 
kein Fehler sein! Alle Verbindungen laut Tabelle müssen vorhanden sein.


Wie weiter oben schon vorgeschlagen

#define F_CPU 1000000

durch

#define F_CPU 16000000

ersetzen um pessimistisch zu arbeiten.
Dann gehts zwar etwas zu langsam, aber das ist immer noch besser als zu 
schnell.

von Marcel S. (Gast)


Lesenswert?

Sehe ich das richtig das es doch eigentlich funktionieren muss wenn der 
Jumper komplett drauf ist...im mom tut sich nichts...ich klingel mal 
alles durch

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Sehe ich das richtig das es doch eigentlich funktionieren muss

'muss' muss nicht.
es ist nur wieder ein Fehler weniger.

von Marcel S. (Gast)


Lesenswert?

Also ich habe den Jumper nun ganz drauf gemacht. Alle Leitungen 
durchgegangen alles piept wie es soll bis auf der Pin in der linken 
Reihe der letzte ganz unten...da tut sich gar nichts ich weiß aber auch 
nciht ob der nun wirklich wichtig ist
Anzeige des LCDs wie bisher nichts außer den Balken

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:

> da tut sich gar nichts ich weiß aber auch
> nciht ob der nun wirklich wichtig ist

Geht er auf die LCD Leiste oder nicht?
Wenn ja, dann ist er wichtig.

> Anzeige des LCDs wie bisher nichts außer den Balken

OK. Was steht auf deinem Quarz drauf?

von Marcel S. (Gast)


Lesenswert?

Auf dem Quarz steht: AQ11.059F
Die Leiterbahn ohne pieps führt zu dem Taster (siehe Schaltplan) dann 
die LED und abschließend zum Poti und zum letzten Pin der LCD Anzeige :/

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Auf dem Quarz steht: AQ11.059F

Na dann trag mal 11.059Mhz in deiner LCD Konfiguration ein.

Den ifndef schmeisst du raus
1
...
2
////////////////////////////////////////////////////////////////////////////////
3
// Hier die verwendete Taktfrequenz in Hz eintragen, wichtig!
4
5
#define F_CPU 11059000
6
7
////////////////////////////////////////////////////////////////////////////////
8
...

> Die Leiterbahn ohne pieps führt zu dem Taster (siehe Schaltplan) dann
> die LED und abschließend zum Poti und zum letzten Pin der LCD Anzeige :/

Und der ist Masse.
Also ist die Leitung uninteressant für das LCD.

von Marcel S. (Gast)


Lesenswert?

Bringt leider auch nichts. Egal wie der Kontrast eingestellt ist, ich 
bekomme maximal schwarze Balken angezeigt :/

von Marcel S. (Gast)


Lesenswert?

könnte es jetzt vllt noch eher etwas Softwaretechnisches sein?

von Karl H. (kbuchegg)


Lesenswert?

Was meint der Rest hier?

DB0-DB4 mal von GND wegnehmen lassen?
(Viel Hoffnung hab ich nicht, dass das noch was ändert.)

von Marcel S. (Gast)


Lesenswert?

Wie soll ich das denn anstellen? xD

von Hubert G. (hubertg)


Lesenswert?

Die Software läuft sicher, auch mit 11,059MHz
Ob D0 - D3 auf GND liegt ist egal, braucht nur minimal mehr Strom.
Ich tippe auf HW-Fehler oder Fehler beim kompilieren.

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Wie soll ich das denn anstellen? xD

Mit einem scharfen Messer die Leiterbahn davor und danach unterbrechen. 
Mit einem Kabel dann die Masseleitung an den Pins vorbei wieder flicken. 
Die Pins danach wieder mit dem scharfen Messer voneinander trennen.


Wenn die Hardware soweit in Ordnung ist, dann ist ein nicht 
initialisierendes LCD meistens auf einen Timingfehler zurückzuführen. 
Sprich: Der µC ist zu schnell für das LCD.

Ich denke auch, dass es gut wäre in der Hauptschleife etwas zu machen, 
zb eine LED blinken zu lassen, damit auch sicher erkennbar ist, dass der 
µC überhaupt läuft (mittlerweile traue ich nix und niemandem mehr, 
solange bis es getestet wurde)

von Marcel S. (Gast)


Lesenswert?

Als ich den Widerstand R25 rausnahm blieb ein leeres Loch zurück...kann 
das eventuell ein Grund sein :D
Falls ja: schäm

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Als ich den Widerstand R25 rausnahm blieb ein leeres Loch zurück...kann
> das eventuell ein Grund sein :D

Nö. Das ist schon ok.
Dafr hast du ja das Poti so umverdrahtet, dass es eine einstellbare 
Spannung an den LCD Pin liefert. Und das das funktioniert wissen wir, 
weil du den Kontrast ja einstellen kannst.

von Marcel S. (Gast)


Lesenswert?

Okay...
jetzt gehen glaub ich ernsthaft die Ideen aus ...
Ich habe gelesen, dass wenn das LCD initialisiert ist, die schwarzen 
Balken verschwinden. Naja egal ich weiß auch nicht

von Hubert G. (hubertg)


Lesenswert?

Leuchtet die grüne LED wenn du die Taste drückst? Ist der Jumper für die 
Leitung1 auf deinem SChaltbild auch gesteckt? Wenn ja, dann ändere mal 
den Code entstprechend:
1
#include <avr/io.h>
2
#include "lcd-routines.h"
3
#include <util/delay.h>
4
5
int main(void)
6
{
7
8
DDRD=(1<<DDD6)|(1<<DDD7);
9
PORTD&=~(1<<PD6);
10
  lcd_init();
11
  lcd_data( 'T' );
12
  lcd_data( 'e' );
13
  lcd_data( 's' );
14
  lcd_data( 't' );
15
  
16
  lcd_setcursor( 0, 2 );
17
  
18
  lcd_string("Hello World!");
19
  
20
  while(1)
21
  {
22
  PORTD|=(1<<PD7);
23
  _delay_ms(500);
24
  PORTD&=~(1<<PD7);
25
  _delay_ms(500);
26
  }
27
  
28
  return 0;
29
}
Die grüne LED sollte im Sekundentakt blinken.

von Marcel S. (Gast)


Lesenswert?

Mir ist grade aufgefallen, dass jemand an zwei Ports ein "D" geschrieben 
hat. Wenn ich es in den anderen Stecke, leuchtet sie im Sekundentakt. 
Allerdings war das auch schon vorher so. Jumper ist komplett drauf 
allerdings ist das ja nun ein anderer Port

von Marcel S. (Gast)


Lesenswert?

wenn ich die Taste drücke leuchtet die LED -> alter Port
wenn ich die Taste nun drücke, leuchtet sie durchgehend bis ich loslasse 
dann blinkt sie wieder -> neuer Port

von Hubert G. (hubertg)


Lesenswert?

Mir ist nicht klar was du mit alter und neuer Port meinst, der PortD 
geht bis Pin21.

von Marcel S. (Gast)


Lesenswert?

Der Mikrocontroller kommt aus dem Labor unserer Schule und jemand hat 
diesen einmal verwendet und zwei Ports mit einem Filzstift als "Port D" 
gekennzeichnet. Nun ist mir das gerade aufgefallen und habe mal auf den 
anderen "Port D" umgesteckt. Dort blinkt die LED im Sekundentakt, was 
sie allerdings auch schon vor deinem Code getan hat. Jedoch ist das der 
einzige Port auf dem sie blinkt. Das ist der neue Port. Mit dem alten 
Port meine ich der Port auf dem ich es den ganzen Tag also bisher laufen 
lies. Dort blinkt die LED nicht. Sie leuchtet aber, wenn man den Taster 
drückt.

von Hubert G. (hubertg)


Lesenswert?

Auf welchen Pin von dem Kontroller bist du drauf wenn die LED blinkt? 
Zähl bitte mal.
Wenn die LED vorher auch schon geblinkt hat, dann hast du das Programm 
nicht ordnungsgemäß geladen und es ist immer noch das ursprüngliche 
drauf.

von Marcel S. (Gast)


Lesenswert?

Nach einer Zeit hat er nun aufgehört zu blinken...
Auf welchen Pin von dem Kontroller bist du drauf wenn die LED blinkt?
Welcher Pin? Ich hätte verstanden wenn du Port meinst aber was für ein 
Pin?
wie zählt man die dinger eig...? in einer reihe oder immer so 
voreinander?

von Hmm (Gast)


Lesenswert?

Gna, gna, gna...

Guck mal bitte in das Datenblatt. Das wäre wirklich hilfreich.

von Marcel S. (Gast)


Lesenswert?

tut mir leid :D hab das DAtenblatt eines ATmega32 aber ich finde da 
keinen Schaltplan :/ Hast du nen fixen Link?

von Hubert G. (hubertg)


Lesenswert?

Ja, Datenblatt lesen wäre nicht schlecht. Gleich auf der zweiten Seite 
ist die Pin-Belegung.
Der Kontroller hat 40 Pin, beginnend bei dem Punkt neben der Kerbe, die 
Reihe hinunterzählen und auf der anderen wieder hinauf. Pin40 ist 
gegenüber Pin1.

von Hmm (Gast)


Lesenswert?

Was für einen Schaltplan suchst Du im Datenblatt?

Dort steht an welchem Pin welches Bit von welchem Port hängt.

Ach und ein "Pin" ist ein Anschluss des Prozessors.

P.S. Und bitte höre auf Dich zu entschuldigen. Die ersten drei mal nimmt 
man das noch zur Kenntniss. Danach nervts nur noch.

von Marcel S. (Gast)


Lesenswert?

Ich halte den Kontroller so, dass die Kerbe oben ist. In der Zeichnung 
ist sie auch oben. Ich bin also bei den "PC0-7" Dingern. Der PD7 scheint 
da ja auch noch hinzugehen :/ Könnte das der Grund sein, dass die LED 
geht=?

von Hubert G. (hubertg)


Lesenswert?

Der PD7 ist zwar auf der Seite von PortC (Pin21), wenn du aber genau 
schaust, dann siehst du das er unterhalb des Kontroller vorbei auf den 
Stecker von PortD geht.

von Marcel S. (Gast)


Lesenswert?

Der "alte Port" war PD0-7

von Hmm (Gast)


Lesenswert?

Was ist ein "alter" Port? Die Ports haben beginnend mit der 
Fertigstellung des Prozessors alle das selbe Alter.

Gewöhne Dir bitte an, Dich klar auszudrücken.

von Marcel S. (Gast)


Lesenswert?

Ist mir schon klar. Das habe ich aber weiter oben erklärt, dass solltest 
du dann eben noch einmal nachlesen.

von Hubert G. (hubertg)


Lesenswert?

Du hast immer noch nicht gesagt auf welchem gezählten Pin des Kontroller 
du bist wenn die LED blinkt.
Das was du weiter oben geschrieben hast ist eben nicht klar.
Die Pin14 bis 21 des Kontroller beinhalten den PortD PD0 - PD7. Da gibt 
es nicht alt oder neu.

von Hmm (Gast)


Lesenswert?

Dann halt nicht.

von Hmm (Gast)


Lesenswert?

Sag mal hast Du sie noch alle? Wer glaubst Du wer Du bist?

Du sollst hier nicht Deine Begriffssystem uns erklären damit wir Dich 
verstehen, sondern die allgemein anerkannten und von uns verwendeten 
Begriffe und Erklärungsmuster benutzen, damit wir Dich verstehen. Da Du 
etwas von uns willst wirst Du Dich an UNS anpassen müssen, nicht 
umgekehrt.

von Marcel S. (Gast)


Lesenswert?

Die LED blinkt nur an Port C...sonst an keinem. Die LED liegt, wie ich 
es sehe an Pin 29

von Hubert G. (hubertg)


Lesenswert?

Das ist die LED auf der Platine des LCD?
Du hast kein Programm auf den Kontroller geladen. Da ist immer noch das 
ursprüngliche drauf.
Womit ladest du dein Programm auf den Kontroller?

von Marcel S. (Gast)


Lesenswert?

Sag mal ich lass hier nicht so mit mir reden. Ich kenne diese ganzen 
Begrifflichkeiten noch nicht und das, was ich dort erklärt habe kann ich 
auch noch nicht im Moment mit Begriffen wie Pin oder sonst etwas 
erklären. Ehrlich gesagt finde ich das echt schade, da sich einige Leute 
wirklich um mein Problem bemühen, aber ich werde mir glaube ich wirklich 
noch einmal gründlich überlegen, ob ich hier noch einmal eine Frage 
stelle. Ich weiß auch deine Hilfe zu schätzen, aber SO, hat hier meiner 
Meinung nach niemand mit mir zu reden. Und SO, wirst du eher das 
Gegenteil erreiche...

von Marcel S. (Gast)


Lesenswert?

Mit einem AVR Dragon und in Atmel Studio 6

von Marcel S. (Gast)


Lesenswert?

Zwischen dem Dragon und dem Controller ist noch ein Adapter, der von 10 
auf 6 keine Ahnung wie man das nennt bevor ich iwas falsches sage -.-
umwandelt

von Hubert G. (hubertg)


Lesenswert?

Und das Studio sagt dir nach dem laden das alles OK ist?
Wie erklärst du dir das eine LED am PortC blinkt und auf dem Port gar 
nichts programmiert ist?
Hast du auch den richtigen Kontroller eingestellt?
Der 10 auf 6 Adapter spielt keine Rolle.

von Marcel S. (Gast)


Lesenswert?

Das ganze klingt tatsächlich etwas komisch ^^
Beim Laden geht alles klar keine Fehler ...
Kontroller habe ich ATmega32 ausgewählt...hat bisher immer funktioniert, 
also die richtigen Programme waren anschließend drauf

von Werner (Gast)


Lesenswert?

Nur mal so 'ne Frage:
Weiß der Controller auch, dass er den Quarz benutzen soll?

von Hubert G. (hubertg)


Lesenswert?

Du kannst den Kontroller mal löschen, nichts laden. Dann schaust du ob 
noch was blinkt.
Es kann auch sein das du immer das falsche Programm ladest, alles schon 
passiert.
ICh mach jetzt Schluß. Gute Nacht.

von Marcel S. (Gast)


Lesenswert?

@Werner
Wenn ich wüsste wie man das sagt :)
@Hubert
Wenn ich alles lösche blinkt es nicht mehr. Scheint wohl was im Programm 
nicht zu stimmen. Schau nochmal vorbei irgendwann :P Gute Nacht :)

von Marcel S. (Gast)


Lesenswert?

Wahahahahahahaa es funktioniert!!!!!!!!!!!!!!
Ich hab das Ding nochmal neugestartet und jetzt klappts :):):)
Danke für eure Hilfe! Ohne euch wäre ich da noch ewig drangesessen!

von Hubert G. (hubertg)


Lesenswert?

Dann ist es ja gut.
Es gibt eben viele Möglichkeiten sich selbst ein Ei zu legen.
Programme in denen das *.hex-File den gleichen Namen hat. Da lädt man 
mehrmals das falsche File im festen Glauben das richtige zu haben usw.
Viel Spass noch.

von Werner (Gast)


Lesenswert?

Marcel S. schrieb:
> Wenn ich wüsste wie man das sagt :)

Dafür gibt es die Flash Fuse Bits (s. Datenblatt im Abschnitt Clock 
Sources)

Prüfen kann man die Taktfrequenz z.B., indem man ein kleines Programm 
schreibt, dass eine LED an einem Port-Pin mit vorgegebener Frequenz 
blinken läßt und die tatsächliche Frequenz damit vergleicht.

Weiter viel Spaß

von Marcel S. (Gast)


Lesenswert?

Eine Frage hätte ich noch. Ich versuche nun auf dem LCD Spannungen 
auszugeben, welche ich mit dem ADC eingelesen habe. Jedoch bin ich mir 
nicht ganz sicher wie ich das umrechne. Er zeigt mir eine Zahl auf dem 
Display an
immer so etwas: Spannung: 03123232
Drehe ich am Poti, der am ADC Port angeschlossen ist, verändert sich 
diese "Spannung" auch. Entweder stimmt was mit der Umrechnung 
nicht...habe die Formel -> Vin = ADC * Vref/1024 gefunden. Die 
Referenzspannung ist mir allerdings nicht bekannt. Gibt es nicht einen 
relativ einfachen Weg diese herauszufinden? Das ganze kann ja 
wahrscheinlich auch etwas mit der Komma Setzung zu tun haben. Bestimmt 
habt ihr da Erfahrung dürfte nichts weltbewegendes sein :)

Der Quellcode:
http://pastebin.com/DETcsc3f

von Hubert G. (hubertg)


Lesenswert?

Da wären wir wieder mal beim Datenblatt.
Was bedeutet es wenn im ADMUX-Register die Bits REFS0 und REFS1 gesetzt 
sind.
Schau dir im AVR-GCC was UTOA macht.
Wenn wir dir hier wirklich alles vorkauen, dann funktioniert zwar dein 
Programm, du hast aber keine Ahnung davon.

von Marcel S. (Gast)


Lesenswert?

Also ich habe nun auf verschiedenen Seiten weiter nachgelesen und die 
Ausgabe nun mit sprintf gelöst. Bekomme ich dasselbe wie mit utoa. Ist 
ja auch egal :) Jedenfalls bekomme ich nun akzeptable Werte zwischen 0 & 
3680mV. Ich habe im Internet recherchiert und bin zum Entschluss 
gekommen, die 5V als Vref anzunehmen. Das einzige was mir jetzt noch 
Bauchschmerzen bereitet ist, dass wenn ich den Poti am ADC drehe, die 
Spannung erst auf 1000mV absinkt und dann plötzlich auf 9000mV ansteigt 
und dann wieder absinkt bis schließlich null?!
Außerdem kann ich mir nicht sicher sein, ob die Werte stimmen. Hab es 
schon mit nachmessen probiert an den passenden Pins. Leider konnte ich 
da nichtmal 1mV messen. Habe auch schon im Internet geschaut und finde 
kein geeignetes Verfahren.

Der neue Quellcode:
http://pastebin.com/mwSTxpD3

PS: Ich wäre echt froh über eine kurze Bestätigung, dass ich das richtig 
in eine Spannung umgerechnet habe! :)

von Eumel (Gast)


Lesenswert?

Marcel S. schrieb:
> Ich habe im Internet recherchiert

Hast du eigentlich Angst vor dem Datenblatt? Das ist die beste Anleitung 
die es gibt.

von Marcel S. (Gast)


Lesenswert?

Ehrlich gesagt schon, da das 320 Seiten auf Englisch sind und ich 
vielleicht die hälfte der verwendeten Begriffe verstehe...Wie stehts 
denn nun mit der Umwandlung in meinem Code?

von L. Ehrer (Gast)


Lesenswert?

Marcel S. schrieb:
> Formel -> Vin = ADC * Vref/1024 gefunden

Formeln findet man nicht einfach, sondern man versteht sie bzw. leitet 
sie ab und wendet sie dann an.

von Marcel S. (Gast)


Lesenswert?

Denkst du das weiß ich nicht? Ich habe nur einfach keinen Durchblick in 
dieser Materie und ich habe echt das Gefühl, als müsste ich hier 
anscheinend alles schon verstehen bzw. wissen. Weißt du ich habe 
versucht die Formel zu verstehen und das ganze in meinem Code dann 
schließlich zu verwirklichen. Da ich mir aber nicht sicher bin ob das, 
was ich getan hab soweit richtig ist, frage ich lieber noch einmal nach. 
Nur leider bekomme ich im Moment anscheinend nur solche komischen 
Kommentare, die mir nicht im geringsten weiterhelfen...

von Hubert G. (hubertg)


Lesenswert?

Was ergibt 5000/1024  ??
Was berechnest du damit?

von Marcel S. (Gast)


Lesenswert?

Irgendwo hier im Forum hatte ich gelesen das das etwas mit den 
Kommastellen auf sich hat. Daher konnte man statt 5 die 5000 schreiben 
uns erhält am Ende das ganze in Millivolt. Falls ich das richtig 
verstanden habe ;)

von Marcel S. (Gast)


Lesenswert?

Wenn ich das ganze zurück in 5 ändere, erhalte ich auf dem LCD "0" egal 
wie ich den Poti einstelle.

von Hubert G. (hubertg)


Lesenswert?

Zum heutigen Abschluß:
5000/1024=4  Der Kontroller berechnet keine Kommastellen. Lass dir was 
einfallen dazu.

Schau mal ins Datenblatt was du hier einstellst:
     ADMUX = (1<<REFS1) | (1<<REFS0);

Schau mal ins Datenblatt ob diese Einstellung richtig sein kann:
ADCSRA = (1<<ADPS1) | (1<<ADPS0);

Du gibst am LCD z.B. 2576 mV aus.
Dann verstellst du die Eingabe auf 30   mV was zeigt das Display an? 
Zeigt es 30   mV oder zeigt es 3076mV an?
Du löscht keine Stellen, sie werden nur überschrieben, die nicht 
überschriebenen bleiben stehen.

von Eumel (Gast)


Lesenswert?

Hubert G. schrieb:
> Schau mal ins Datenblatt

Geht doch nicht, 300 Seiten machen ihm Angst.

von Hubert G. (hubertg)


Lesenswert?

Eumel schrieb:
> Geht doch nicht, 300 Seiten machen ihm Angst.

Ich werde sie ihm aber nicht vorlesen.

Und für Marcel:
Warnings des Compiler sollte man nicht ignorieren.

von Marcel S. (Gast)


Lesenswert?

Okay danke für die Gedankenanstöße. Ich melde mich wieder wenn ich mich 
damit beschäftigt habe morgen ist erstmal mein Geburtstag angesagt :)
Ach ja und @Eumel
Diese Art Kommentare helfen mir einfach nicht weiter ja? Wenn dir nicht 
passt was ich sage dann hat das doch hier eigentlich nichts zu suchen. 
Ich werde mich natürlich um das Datenblatt bemühen, aber nicht jeder 
kann das alles aufs erste Mal...

von Eumel (Gast)


Lesenswert?

Marcel S. schrieb:
> aber nicht jeder
> kann das alles aufs erste Mal

Du musst auch nicht viel können sondern nur lesen. Dann musst du nicht 
lange auf irgendwelchen Seiten im Internet rumsuchen was jetzt die Bits 
in ADMUX und ADCSRA bedeuten sondern schaust halt schnell im Datenblatt 
nach.
Ja, das Datenblatt ist groß aber du musst das ja nicht am Stück 
durchlesen sondern nur die Passagen die für die interessant sind. Also 
das Kapitel über den ADC. Also hör auf die alles vorkauen zu lassen und 
benutz dein eigenes Hirn.

von Marcel S. (Gast)


Lesenswert?

Ich verstehe was du meinst, aber mir vorzuwerfen ich würde mein eigenes 
Hirn nicht benutzen...langsam finde ich das hier nicht mehr witzig und 
ich fühle mich schlichtweg beleidigt. Wie auch immer...im Moment hab ich 
echt genug ich bin erstmal raus...

von Spess53 (Gast)


Lesenswert?

Hi

>aber nicht jeder kann das alles aufs erste Mal...

Deswegen macht man auch nicht alles 'aufs erste Mal'.

MfG Spess

von Marcel S. (Gast)


Lesenswert?

Ich habe aber keine andere Wahl. Ich muss es so oder so mache :/

von Hubert G. (hubertg)


Lesenswert?

Marcel S. schrieb:
> Ich habe aber keine andere Wahl. Ich muss es so oder so mache :/

Aber ohne Grundlagen und ein bisschen Englisch ist es sehr schwierig.
Deine Programmer hier sehen sehr nach "copy und paste" aus, speziell das 
letzte mit dem ADC.
So lässt sich nichts dauerhaft erlernen, da man nicht weiß was 
geschieht.
Wie gut kannst du eigentlich C?

von Marcel S. (Gast)


Lesenswert?

C hatte ich jetzt 1 Jahr in der SChule und liegt mir sehr gut. Ich habe 
immerhin Programme mit Umfang 1000 Zeilen geschrieben ... leider ist das 
hier doch noch ein bisschen was anderes. Das habe ich jedenfalls im 
Gefühl. Gerade mit diesen Bits un Bytes und den Hexadezimalzahlen aber 
wenn ich mich da nochmal richtig reinhänge...Ich behaupte nun einfach 
das ich C Fortgeschrittener Anfänger bin :P

von Hubert G. (hubertg)


Lesenswert?

C auf dem PC ist eine sehr gute Grundlage.
Dann sollte aber das durcharbeiten des Tutorials hier:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
kein großes Problem bedeuten. Hier lernst du dein C-Wissen hardwarenahe 
für den AVR zu verwenden. Das ist hier sehr wichtig, da hier Hardware 
und Software, im Gegensatz zu PC, sehr nahe beieinander liegen.

von Marcel S. (Gast)


Lesenswert?

Okay wie gesagt ich werde es nochmal intensiv durchgehen. Was mich noch 
interessieren würde ist, ob diese Berechnung mit den 5000/1024 nun 
wirklich stimmt :) Und ich wäre noch froh wenn du mir kurz sagen 
würdest, was ich mir unter einem Register vorstellen kann. Dieser 
Begriff will sich einfach nicht vor mir auflösen :) Dienen diese einfach 
dazu, um bestimmte Pins auf Eingang oder Ausgang zu setzen?

von Eumel (Gast)


Lesenswert?

Marcel S. schrieb:
> Und ich wäre noch froh wenn du mir kurz sagen
> würdest, was ich mir unter einem Register vorstellen kann. Dieser
> Begriff will sich einfach nicht vor mir auflösen :) Dienen diese einfach
> dazu, um bestimmte Pins auf Eingang oder Ausgang zu setzen?

Einfach ein Byte. Also 8 einzelne Bits zu einer größere logischen 
Einheit zusammengefasst. Man könnte auch Speicherzelle sage. Welche 
Funktion das Register hat ist aber dadurch nicht fetgelegt. Ein Register 
im RAM ist z.b. "nur" ein Datenspeicher in dem dein Programm Daten 
speichern und wieder lesen kann. Andere Register deines Mikrocontrollers 
haben spezielle funktionen. So kannst du z.b. durch die DDRX Register 
bestimmen welcher Pin eines Ports ein Eingang oder ein Ausgang sein 
soll. Andere Register, z.b. die des ADC haben andere Funktionen. Du 
steuerst die einzelnen Komponenten deines Controllers (ADC, Timer, I/O 
Ports) in dem du bestimmte Werte in die entsprechenden Register 
schreibst. Welche Register das genau sind und welche Werte was bewirken 
entnimmst du dem Datenblatt.
Stell dir ein Register einfach als 8 Schalter die du auch "Null" oder 
"Eins" setzen kannst vor. Mehr ist es nicht.

von Eumel (Gast)


Lesenswert?

Eumel schrieb:
> Stell dir ein Register einfach als 8 Schalter die du auch "Null" oder
> "Eins" setzen kannst vor. Mehr ist es nicht.

Stell dir ein Register einfach als 8 Schalter die du auf "Null" oder
"Eins" setzen kannst vor. Mehr ist es nicht.

So ist es richtig.

von L. Ehrer (Gast)


Lesenswert?

Marcel S. schrieb:
> Denkst du das weiß ich nicht? Ich habe nur einfach keinen Durchblick in
> dieser Materie ...

Dann betrachte es allgemeiner und nenne es "Dreisatz".

von Hubert G. (hubertg)


Lesenswert?

Marcel S. schrieb:
> Was mich noch
> interessieren würde ist, ob diese Berechnung mit den 5000/1024 nun
> wirklich stimmt

Nein, sie stimmt in diesem Fall nicht. Es werden standardmäßig keine 
Stellen nach dem Komma berechnet. Fließkommaberechnungen sind zwar 
möglich, sollte man aber aufgrund großer notwendiger Rechenleistung 
vermeiden.
Das Ergebnis der Rechnung ist, wie ich schon mal geschrieben habe, 4 und 
daher sicher nicht das gewünschte Ergebnis.
Wenn du allerdings den ADC-Wert *5000 und dann /1024 rechnest, hast du 
ein brauchbares Ergebnis.
Dazu musst du AREF aber noch auf VCC einstellen.

von Marcel S. (Gast)


Lesenswert?

Danke für den guten Vergleich und die ausführliche Erklärung. Jetzt 
kanns losgehen mit dem Tut :)

von Marcel S. (Gast)


Lesenswert?

Hubert G. schrieb:
> ADMUX = (1<<REFS1) | (1<<REFS0);

Da das ganze auf 5V, also Vcc laufen soll, habe ich nun das daraus 
gemacht:
ADMUX |= (1<<REFS1);
ADMUX &= ~(1<<REFS0);

Hubert G. schrieb:
> Schau mal ins Datenblatt ob diese Einstellung richtig sein kann:
> ADCSRA = (1<<ADPS1) | (1<<ADPS0);

Hier bin ich mir nicht ganz sicher. Im Datenblatt habe ich die Default 
Clock Source gefunden, welche normalerweise auf 1MHz steht. Bei dem 
Quarz (11,059MHz) würde ich auf einen Teilungsfaktor im Bereich 55 bis 
220 kommen...Was kannst du mir in diesem Fall raten? Quarz oder Default 
setting? Was ist hier eher anzunehmen?

Hubert G. schrieb:
> Du gibst am LCD z.B. 2576 mV aus.
> Dann verstellst du die Eingabe auf 30   mV was zeigt das Display an?
> Zeigt es 30   mV oder zeigt es 3076mV an?
> Du löscht keine Stellen, sie werden nur überschrieben, die nicht
> überschriebenen bleiben stehen.

Hier habe ich mir überlegt alles neu auf das Display zu schreiben, bzw. 
die Variable nach jedem Durchlauf wieder auf 0 zu stellen, was jedoch 
keine Veränderung bringt. Du hast recht, die Messmethoden sind copy & 
past aber ich bin sie nun noch einmal durchgegangen und ich glaube ich 
habe sie nun größtenteils verstanden bis auf:
ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
Ich komme nicht dahinter was ich tun muss, um die Stellen richtig zu 
erhalten. Im Moment bekomme ich mit der neuen Vref Werte bis -200000.
Hier der aktuelle Quellcode:
http://pastebin.com/GUYNMY0n

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:

> Hier bin ich mir nicht ganz sicher. Im Datenblatt habe ich die Default
> Clock Source gefunden, welche normalerweise auf 1MHz steht. Bei dem
> Quarz (11,059MHz) würde ich auf einen Teilungsfaktor im Bereich 55 bis
> 220 kommen...Was kannst du mir in diesem Fall raten? Quarz oder Default
> setting? Was ist hier eher anzunehmen?

Den Quarz und die Quarz Fuses lässt du in Ruhe.
Statt dessen stellst du die den Teiler für den ADC so ein, dass du in 
den Frequenzbereich kommst, den du haben solltest. Wobei du eher auf der 
langsamen Seite bleibst als auf der Schnellen (zumindest solange, 
solange du keinen guten Grund dafür hast, die schnellere ADC 
Taktfrequenz zu verwenden)

> Hier habe ich mir überlegt alles neu auf das Display zu schreiben, bzw.
> die Variable nach jedem Durchlauf wieder auf 0 zu stellen, was jedoch
> keine Veränderung bringt.

Die Variable ist nicht dasselbe wie das was auf dem LCD steht. Auf dem 
LCD stehen einfach nur Buchstaben (die aus dem Inhalt der Variablen 
generiert werden). Und so wie du mit dem Belistift auf einem Blatt 
Papier zwar auch über etwas drüber schreiben kannst, genauso bleibt auf 
dem Papier alles das stehen, was du eben nicht überschreibst.

Ich denke du hast schon 1 Jahr C programmiert? Hast du da nicht gelernt 
welche Formatiermöglichkeiten man mit printf bzw. sprintf hat und dass 
man sprintf anweisen kann, Zahlen zb immer 4 stellig zu formatieren? Und 
sei es nur dewegen, weil eine Zahl wie 35 mit 2 Leerzeichen links auf 4 
stellig "aufgepumpt" wird. 4-stellig ist 4-stellig. Und wenn ich den 
4-stelligen Text " 386" mit dem 4-stelligen Text "  78" überschreiben 
lasse, dann steht dann nachher auch 78 auf dem LCD und nicht 378, weil 
die 3 nie überschrieben wurde. Sie wurde überschrieben, und zwar mit dem 
Leerzeichen, mit dem sprintf den Text für 78 linksbündig aufgeblasen 
hat, um ihn 4-stellig zu machen.

> erhalten. Im Moment bekomme ich mit der neuen Vref Werte bis -200000.

Du brauchst nur richtig umrechnen und die Basisregeln zur Auswertung von 
Ausdrücken in C beachten. Nichts was einen 1-jährigen C-Programmierer 
groß vor Probleme stossen sollten.

int dividiert durch int wird als Integer-Division ausgefhrt und liefert 
wieder einen int.

Und der Rest ist
1024 Äpfel kosten 5000 Cent (also 5.0 Euro)
wieviel kosten 768 (weil der ADC zb 768 geliefert hat) Äpfel?

Rechnen auf Grundschulniveau, in späteren Schuljahren auch bekannt als 
der berühmte Dreisatz.

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Ehrlich gesagt schon, da das 320 Seiten auf Englisch sind und ich
> vielleicht die hälfte der verwendeten Begriffe verstehe...

Und?
Was glaubst du, wie es Japaner, Chinesen und Vietnamesen geht, deren 
eigene Sprache so gut wie gar nichts mit Englisch zu hat?
Und trotzdem gilt für die genau dassselbe wie für dich: Die 
µC-spezifische Bibel heißt Datenblatt!

Ein Datenblatt ist kein Pullitzer-Preis-verdächtiges Machwerk, sondern 
eine technische Beschreibung. Mit Schulenglisch und zur Not einem 
Wörterbuch kommt man sehr weit. Manchmal hilft einem auch ein bischen 
Querverweis-Denken bzw. logisches "Macht das was ich glaube überhaupt 
Sinn" fragen.
So ein µC ist ja kein Gerät aus Hogwarts sondern ist logisch aufgebaut 
und zwar so, dass er deterministisch benutzbar ist.

von Karl H. (kbuchegg)


Lesenswert?

>
1
>              adcval = ADC_Read_Avg(2, 10);  // Kanal 2, Mittelwert aus 4 Messungen
2
>                adcval *= 5000;
3
>                wert = 5000/1024;
4
>                adcval *= wert;
5
>

5000 / 1024 ergibt eine glatte 4.
Warum?
Deswegen
FAQ: Datentypen in Operationen
(Was hast du egentlich in deinem 1 Jahr C Programmierung gelernt? Das 
solltest du nach den ersten 2 Monaten C Programmieren schon längst im 
Schlaf beherrschen!)

Ausserdem ist in C weniger oft mehr. Das hier ist nicht BASCOm, wo man 
alles in Einzelberechnungen aufteilen muss
1
  adcval = ADC_Read_Avg(2, 10);  // Kanal 2, Mittelwert aus 4 Messungen
2
  adcval = adcval * 5000 / 1024;



> Ich behaupte nun einfach das ich C Fortgeschrittener Anfänger bin :P
Du lügst dich selbst an.
Du bist Anfänger auf unterstem Anfängerniveau.
Ganz im Gegenteil: Wenn das mit dem 1 Jahr stimmt, dann bist du sogar 
erschreckend schwach. Aber das 1 Jahr glaub ich dir sowieso nicht (und 
auch nicht die 1000 Zeilen.)

von Karl H. (kbuchegg)


Lesenswert?

Und PS:
%d ist das falsche Formatierzeichen für einen unsigned Wert. Egal ob 
uint16_t oder gar uint32_t. unsigned ist unsigned. Und %d steht nun mal 
für signed Werte.

von Marcel S. (Gast)


Lesenswert?

Okay danke für den Tipp mit dem Formatierungszeichen. Ich hoffe es 
reicht nun endlich mal mit diesem blöden Datenblatt. Ich habe 
mittlerweile begriffen dass dieses wichtig ist und ich habe es auch 
vorhin benutzt um mich über ADMUX und den Takt usw. zu informieren, wie 
du sicher meinem Post entnommen hast. Also hoffe ich dass das nun mal 
geklärt ist.
Zu dem C - Problem hier:
Mir ist klar, dass ich es genauso gut so schreiben kann. Für mich waren 
und sind aber diese einzelnen Schritte erst einmal wichtig gewesen um 
das ganze besser zu verfolgen. Das kann denke ich nun erstmal jeder für 
sich entscheiden. Ich versichere dir, dass ich kein blutiger Anfänger 
bin und du das auf Grund dieses Quellcodes noch lange nicht 
verallgemeinern solltest. Falls du mir das nicht glaubst pech. Ich weiß 
in diesem Fall was ich kann.

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:

> Mir ist klar, dass ich es genauso gut so schreiben kann. Für mich waren
> und sind aber diese einzelnen Schritte erst einmal wichtig gewesen um
> das ganze besser zu verfolgen.

Dann schau dir doch mal GENAU an, was du eigentlich geschrieben hast.
Wenn dir klar ist, was da die Unterschiede sind, dann hast du wirklich 
was gelernt.

> Ich weiß in diesem Fall was ich kann.

Ja, du kannst
1
   i = j * 5000 * 5000 / 1024;
nicht von
1
   i = j * 5000 / 1024;
unterscheiden, wenn man es auf 2 Zeilen aufteilt :-)
Und was noch viel Schlimmer ist: dir kommt es noch nicht mal in den Sinn 
die Berechnung EXAKT zu überprüfen, wenn du auf dem LCD eine AUsgabe von 
-200000 siehst, was mit einem 16 Bit unsigned int schon mal in 
mehrfacher Hinsicht gar nicht möglich ist.
Fazit: Du hast 4 Zeilen Code selber geschrieben (der Rest ist kopiert), 
3 davon sind fehlerhaft. Das ist weit entfernt von 'fortgeschrittener 
Anfänger'

von Eumel (Gast)


Lesenswert?

Ich finds süß wie schnell Marcel immer angepieselt ist :)

von Marcel S. (Gast)


Lesenswert?

Hubert G. schrieb:
> Wenn du allerdings den ADC-Wert *5000 und dann /1024 rechnest, hast du
> ein brauchbares Ergebnis.

Mir ist schon klar was für einen Unterschied du mir aufzeigen willst. 
Meine Rechnung war auch so gewollt, wie ich sie ursprünglich 
aufgeschrieben haben.
Dann habe ich obiges Zitat wahrscheinlich fehlinterpretiert :D
Mit adcval = adcval * 5000/1024; und sprintf(val,"%u",adcval); erhalten 
ich nun immerhin mal bessere Werte 04 bis 64.

@Eumel
ist halt soo... :P xD

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:

> Mit adcval = adcval * 5000/1024; und sprintf(val,"%u",adcval); erhalten
> ich nun immerhin mal bessere Werte 04 bis 64.

Was hängt am ADC Eingang?
Bei einer Referenzspannung von 5V (also Vcc) und einem Poti als 
Spannungsteiler zwischen GND und VCC

      +5V (Vcc) -------+
                       |
                      +-+
                      | |
                    <----------------------o zum ADC Pin vom µC
                      | |
                      +-+
                       |
       GND ------------+

sollten da aber Werte von 0 bis 4999 rauskommen.

von Marcel S. (Gast)


Lesenswert?

Er will die Bilder nicht hochladen also versuch ich es zu erklären. 3 
Stück von diesen Potis nebeneinander mit jeweils 3 Vorwiderständen bei 
Vcc

     +5V (Vcc) -------+
                       |
                      +-+
                      | |
                      | |
                      | |
                      +-+
                       |
                       |
                       |
                      +-+
                      | |
                    <----------------------o zum ADC Pin vom µC
                      | |
                      +-+
                       |
       GND ------------+

Das drei mal nebeneinander auf einer Lochrasterplatine und dann per 
Flachbandkabel rüber.

von Eumel (Gast)


Lesenswert?

Wozu hast du da noch einen extra Widerstand?

von Marcel S. (Gast)


Lesenswert?

Messen tue ich nur beim untersten Poti...

von Marcel S. (Gast)


Lesenswert?

Witzige Sache. Noch so eine Idee meines Lehrers, der meistens viel zu 
wenig Zeit hat, um uns irgendwas zu erklären. Ich weiß es nicht Eumel 
sag du es mir wenn du eine Vermutung hast :/

von Eumel (Gast)


Lesenswert?

wie groß ist der Widerstand wie was für ein Poti ist da verbaut?
Das was du oben aufgezeichnet hast, ist das 3 mal parallel geschaltet?

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Witzige Sache. Noch so eine Idee meines Lehrers, der meistens viel zu
> wenig Zeit hat, um uns irgendwas zu erklären. Ich weiß es nicht Eumel
> sag du es mir wenn du eine Vermutung hast :/


grober Unfug?

von Marcel S. (Gast)


Lesenswert?

Die Widerstände haben jeweils 12kOhm
Die Potis haben jeweils 10kOhm
Ich weiß nicht ob man das Prallel nennen kann :D
Jeder der Potis hat eine eigene Leitung auf dem Flachbandkabel für Vcc 
und Masse usw. Also 3 mal das hier hinereinander ohne eine Verbindung...

      +5V (Vcc) -------+
                       |
                      +-+
                      | |
                      | |
                      | |
                      +-+
                       |
                       |
                       |
                      +-+
                      | |
                    <----------------------o zum ADC Pin vom µC
                      | |
                      +-+
                       |
       GND ------------+

von Al3ko -. (al3ko)


Lesenswert?

Marcel S. schrieb:
> Ich weiß nicht ob man das Prallel nennen kann :D

Du bist echt mein Held der letzten zwei Tage...

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Die Widerstände haben jeweils 12kOhm
> Die Potis haben jeweils 10kOhm

Selbst dann müssten die gemessenen Werte vom ADC (Rohwerte) sich im 
Bereich 0 bis 465 bewegen.
Aber eigentlich ist dieser Schaltungsaufbau schwachsinnig. Man 
verschenkt damit ADC-Auflösung, ohne etwas dafür zu bekommen.

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:

> Also 3 mal das hier hinereinander ohne eine Verbindung...

Dann interessiert auch keinen, dass es diese Schaltung 3 mal gibt.
1 dieser Teilschaltungen an 1 ADC-Eingang. Und die wird ausgemessen.

von Eumel (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Dann interessiert auch keinen, dass es diese Schaltung 3 mal gibt.
> 1 dieser Teilschaltungen an 1 ADC-Eingang. Und die wird ausgemessen.

Doch mich, weil es für mich aus dem Text nicht ganz klar wurde.

von Marcel S. (Gast)


Lesenswert?

Keiner mehr eine Idee?
Ich schmeiße einfach nochmal den aktuellen Quellcode rein:
http://pastebin.com/YnbpbeC7

von Karl H. (kbuchegg)


Lesenswert?

Und warum kannst den nicht hier posten?
Entweder einfach als File anhängen oder in den Text einfügen
1
#include <avr/io.h>
2
#include "lcd-routines.h"
3
#include <util/delay.h>
4
#include <stdint.h>
5
 
6
 
7
void ADC_Init(void) {
8
 
9
  uint16_t result;
10
 
11
  ADMUX |= (1<<REFS1);
12
  ADMUX &= ~(1<<REFS0);
13
 
14
  ADCSRA = (1<<ADPS1) | (1<<ADPS0);    
15
  ADCSRA |= (1<<ADEN);                  
16
 
17
  ADCSRA |= (1<<ADSC);                
18
  while (ADCSRA & (1<<ADSC) ) {        
19
  }
20
  result = ADCW;
21
}
22
 
23
uint16_t ADC_Read(uint8_t channel)
24
{
25
        ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
26
        ADCSRA |= (1<<ADSC);
27
        while (ADCSRA & (1<<ADSC) ) {
28
        }
29
        return ADCW;
30
}
31
 
32
uint16_t ADC_Read_Avg(uint8_t channel, uint8_t nsamples)
33
{
34
  uint32_t sum = 0;
35
 
36
  for (uint8_t i = 0; i < nsamples; ++i) {
37
    sum += ADC_Read(channel);
38
  }
39
 
40
  return (uint16_t)(sum / nsamples);
41
}
42
 
43
 
44
int main(void)
45
{
46
        uint16_t adcval;
47
        char val[100] = "";
48
 
49
        DDRD=(1<<DDD6)|(1<<DDD7);
50
        PORTD&=~(1<<PD6);
51
        lcd_init();
52
        ADC_Init();
53
       
54
        lcd_setcursor(0, 1);
55
        lcd_string("Spannung:");
56
        lcd_setcursor(0, 2);
57
        lcd_string("     mV");
58
       
59
        while(1)
60
        {              
61
                adcval = ADC_Read_Avg(2, 10);  // Kanal 2, Mittelwert aus 4 Messungen
62
                adcval = adcval * 5000/1024;
63
                sprintf(val,"%u",adcval);
64
                lcd_setcursor(0, 1);
65
                lcd_string(val);
66
        }
67
       
68
        return 0;
69
}

von Karl H. (kbuchegg)


Lesenswert?

1
               sprintf(val,"%u",adcval);

ich seh immer noch nicht, wie du hier die Formatiermöglichkeiten von 
sprintf zu deinem Vorteil ausnutzt.
1
               sprintf(val,"%4u",adcval);

von Karl H. (kbuchegg)


Lesenswert?

Hast du wenigstens EINMAL ins Datenblatt gesehen, welche 
Referenzspannung du hier
1
  ADMUX |= (1<<REFS1);
2
  ADMUX &= ~(1<<REFS0);
einstellst?

Welche Referenzspannung stellst du denn ein mit

  REFS1  auf 1
  REFS0  auf 0


Bitmanipulation

von Ein (Gast)


Lesenswert?

Ein Thread mit 170 Beiträgen über ein Poti, einen ADC und eine 
formatierte Ausgabe ist echt recordverdächtig.

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

Und wieder mal:
> LCD-Display

grausam...

von Marcel S. (Gast)


Lesenswert?

Natürlich habe ich ins Datenblatt geschaut. Das war dann leider ein 
Übertragungsfehler...Im Endeffekt zeigt mir das LCD immer noch dasselbe 
an.

#include <avr/io.h>
#include "lcd-routines.h"
#include <util/delay.h>
#include <stdint.h>
#include <stdio.h>


void ADC_Init(void) {

  uint16_t result;

  ADMUX |= (1<<REFS0);
  ADMUX &= ~(1<<REFS1);

  ADCSRA = (1<<ADPS1) | (1<<ADPS0);
  ADCSRA |= (1<<ADEN);

  ADCSRA |= (1<<ADSC);
  while (ADCSRA & (1<<ADSC) ) {
  }
  result = ADCW;
}

uint16_t ADC_Read(uint8_t channel)
{
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
  ADCSRA |= (1<<ADSC);
  while (ADCSRA & (1<<ADSC) ) {
  }
  return ADCW;
}

uint16_t ADC_Read_Avg(uint8_t channel, uint8_t nsamples)
{
  uint32_t sum = 0;

  for (uint8_t i = 0; i < nsamples; ++i) {
    sum += ADC_Read(channel);
  }

  return (uint16_t)(sum / nsamples);
}


int main(void)
{
  uint16_t adcval;
  char val[100] = "";

  DDRD=(1<<DDD6)|(1<<DDD7);
  PORTD&=~(1<<PD6);
  lcd_init();
  ADC_Init();

  lcd_setcursor(0, 1);
  lcd_string("Spannung:");
  lcd_setcursor(0, 2);
  lcd_string("     mV");

  while(1)
  {
    adcval = ADC_Read_Avg(2, 4);  // Kanal 2, Mittelwert aus 4 Messungen
    adcval = adcval * 5000/1024;
    sprintf(val,"%4u",adcval);
    lcd_setcursor(0, 2);
    lcd_string(val);
  }

  return 0;
}

von THC-Sido! (Gast)


Lesenswert?

WTF Das ist doch ein Troll-Thread hier???


Junge, Junge was haben die Studenten von heute eigentlich im Kopp!=!=!

Ich möchte niemanden diffamieren aber Junge wenn du Ingenieur werden 
willst LIES Datenblätter und verstehen DIESE!

Ansonsten hier: 
http://www.geocities.com/dinceraydin/djlcdsim/djlcdsim.html

...

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Natürlich habe ich ins Datenblatt geschaut. Das war dann leider ein
> Übertragungsfehler...Im Endeffekt zeigt mir das LCD immer noch dasselbe
> an.

Na dann.
Multimeter raus und mal die Spannung direkt am µC-Pin (welchem?) 
gemessen.
ADC Wert ohne Umrechnung direkt ausgeben.

Zeig doch mal ein bischen Eigeninitiative, wie man Problemen auf den 
Grund gehen kann. Grundsätzlich wird ALLES kontrolliert. Software wie 
Hardware!

von Marcel S. (Gast)


Lesenswert?

Ich messe an PA2 und bekomme je nachdem, wie ich den Poti verstelle, 
Werte zwischen 0V und 2,42V. Hab jetzt erstmal keine Zeit mehr bin weg.

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Ich messe an PA2

Bei jedem anderen würde ich es damit bewenden lassen :-)
Misst du am µC-Pin selber oder am Poti?

Welche Referenzspannung misst du an AREF?

> und bekomme je nachdem, wie ich den Poti verstelle,
> Werte zwischen 0V und 2,42V.

D.h. du hast die Poti-Hardware nicht verändert.
Ist ok. Muss man nur wissen.

von Marcel S. (Gast)


Lesenswert?

NOchmal schnell alles ausgepackt :D
AREF sagt mir 5,03V
Ich habe am Pin direkt gemessen. Nun muss ich aber wirklich los...

von Eumel (Gast)


Lesenswert?

Einmal eine dicke Portion Anerkennung für Karl Heinz Buchegger und seine 
Engelsgeduld!

von Electronics'nStuff (Gast)


Lesenswert?

Ich verstehe nicht was das soll. Der hat jetzt schon so viel Hilfe 
beansprucht und min. 4 User angepöbelt.
Nachher geht er zum Lehrer und zeigt ihm was "er" tolles programmiert 
hat.

@Marcel S.

Ich will dich nicht beleidigen aber so lernst du überhaupt nix. Wenn du 
kein Datenblatt lesen kannst, kannst du dieses Hobby/diesen Beruf 
sowieso vergessen, also würde ich möglichst früh damit anfangen.

von Andreas G. (beastyk)


Lesenswert?

Moin Leute,

ich verfolge diesen Thread auch schon längere Zeit.
Ich möchte mal bezweifeln das der TO sich der Tragweite seines Unwissens 
bewußt ist. Ob er URI(UZI) kennt?
Bei allem würde mich nur interessieren den wievielten Geburtstag Marcel 
schon gefeiert hat!

Gruß
Andi

von Marcel S. (Gast)


Lesenswert?

Ich werde das ganze nun an dieser Stelle abbrechen.

Electronics'nStuff schrieb:
> Der hat jetzt schon so viel Hilfe
> beansprucht und min. 4 User angepöbelt.

Genau jetzt solltest du dich fragen, warum ich, der nicht auf Streit aus 
ist, so etwas tut. Denk darüber nach.

Electronics'nStuff schrieb:
> Ich will dich nicht beleidigen

Das scheinen wohl viele hier nicht zu wollen. Da bin ich mir nur leider 
nicht ganz so sicher wie du.

Andreas G. schrieb:
> Ob er URI(UZI) kennt?

Natürlich kenne ich das. Ich habe nicht umsonst 1 1/2 Jahre 
Elektrotechnik gehabt, was genau der Zeit entspricht, die ich noch in 
diesem Bereich vor mir habe.

Ich möchte mich auf jeden Fall noch einmal abschließend bei:
Karl Heinz Buchegger &
Hubert G.
für die unermüdliche Hilfe bedanken. Der große Rest der Beiträge waren 
wie ich es empfunden habe eher blöde Bemerkungen und Feststellungen wie 
viel ich doch weiß und wie schlau ich doch eigentlich bin. Solche 
Kommentare kann & will ich nicht einfach hinnehmen.
Ich bin dann nun raus aus diesem Forum & wenn jemand Lust hat, kann er 
ja wie anscheinend üblich seine freundliche Meinung hierrunter posten. 
Ansonsten ist  dieser Thread es hoffentlich Wert, gelöscht zu werden...
Tschüss & viel Glück weiterhin

von Electronics'nStuff (Gast)


Lesenswert?

Marcel S. schrieb:
> Genau jetzt solltest du dich fragen, warum ich, der nicht auf Streit aus
> ist, so etwas tut. Denk darüber nach.

Bin ich doch auch nicht.

Marcel S. schrieb:
> Das scheinen wohl viele hier nicht zu wollen. Da bin ich mir nur leider
> nicht ganz so sicher wie du.

Ich wollte dich keinesfalls beleidigen.
Aber es ist besser du hörst es von einem anonymen aus irgend einem Forum 
als von deinem zukünftigen Vorgesetzten.

Marcel S. schrieb:
> Natürlich kenne ich das. Ich habe nicht umsonst 1 1/2 Jahre
> Elektrotechnik gehabt, was genau der Zeit entspricht, die ich noch in
> diesem Bereich vor mir habe.

Na dann solltest du erst recht in das technische englisch reinknien um 
zumindest die Belegungen von Bauteilen aus einem DB rauslesen können.

Marcel S. schrieb:
> Der große Rest der Beiträge waren
> wie ich es empfunden habe eher blöde Bemerkungen und Feststellungen wie
> viel ich doch weiß und wie schlau ich doch eigentlich bin. Solche
> Kommentare kann & will ich nicht einfach hinnehmen.

Naja.. eigentlich schon. Du willst was also musst du dir das anhören.

von Electronics'nStuff (Gast)


Lesenswert?

Und nur so aus Interesse.. stellst du das jetzt als ->dein<- Projekt 
vor?

von Karl H. (kbuchegg)


Lesenswert?

> Ich wollte dich keinesfalls beleidigen.
Ich auch nicht.

>> Natürlich kenne ich das. Ich habe nicht umsonst 1 1/2 Jahre
>> Elektrotechnik gehabt, was genau der Zeit entspricht, die ich noch in
>> diesem Bereich vor mir habe.

Du LERNST ganz offiziell Elektrotechnik und ICH (gelernter Chemiker) 
muss dir erklären, wie man eine Leiterbahn von A nach B verfolgt, bzw. 
du findest nicht von dir aus den nicht gesetzten Jumper?
Jetzt bin ich sprachlos. Ich bin eigentlich davon ausgegangen, du wärst 
Mittelschüler. So irgendwas um die 14, 15 Jahre alt und gehst vielleicht 
in ein Gymnasium.

von Andreas G. (beastyk)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Ich bin eigentlich davon ausgegangen, du wärst
> Mittelschüler. So irgendwas um die 14, 15 Jahre alt und gehst vielleicht
> in ein Gymnasium.

Ich möchte mich nur hier einklinken weil ich nicht der Typ bin der 
andere Menschen runtermachen möchte.

Ich wollte gerne wissen wie alt der TO ist weil ich wie Karl Heinz (den 
ich wirklich schätze) angenommen habe das er in der Pubertät und 
zwischen 14-17 Jahre alt ist.
Das hätte seine doch sehr unreife Art und Weise erklärt mit Kritik 
umzugehen und auch warum da nicht soviel an Fachwissen rüberkam.
Die URI/UZI Frage war von mir gestellt weil der TO nicht den Hauch einer 
Ahnung hatte was da nach dem Widerstand und dem Poti überhaupt auf 
seinem ADC-Pin ankommt.

Wenn das kein Troll Thread ist dann bin ich mal bis aufs Mark 
erschüttert.
Naja, als Gast kann er sich dann als Gerd G. einloggen und die nächsten 
Fragen stellen.

Gruß
Andi

von Thomas D. (lightscape66)


Lesenswert?

Hallo,

mal ganz direkt.... einem Einsteiger, zu dieser Gruppe gehört der 
Erst-Poster offenbar, rate ich dringend, mit Arduinos an zu fangen. Da 
gibt es dann Verweise, wie man die dortige LCD Library prinzipiell 
einsetzt. Das Verdrahten des LCD und der erste Beispieltext.... das war 
eine Sache von wenigen Minuten.

Mein Einstieg war: http://arduino.cc/en/Tutorial/LiquidCrystal

Der Original-Poster hat wohl den Fehler gemacht, schon zu Anfang zu 
schreiben, dass er wenig Zeit hat... was bei vielen dann so ankommt wie: 
"ich bin zu faul selber nach zu denken, helft mir mal"...?!

Wenn der Thread noch aktuell und das Problem noch nicht gelöst ist, 
würde ich erst einmal dazu raten, dass Marcel mal ein Foto des 
Fehlerbildes macht.

Bye,
Thomas

von Karl H. (kbuchegg)


Lesenswert?

Thomas Dieckmann schrieb:

> Wenn der Thread noch aktuell und das Problem noch nicht gelöst ist,

DIESES Problem ist schon längst gelöst, nachdem die Hardware-Bugs alle 
ausgemerzt wurden.
Er ist schon längst beim nächsten 'Problem'.

von axelr (Gast)


Lesenswert?

** Lötlackl schrieb:
> Und wieder mal:
>> LCD-Display
>
> grausam...

  jetzt geht es nämlich schon einige Zeit um den >>ADC-Converter<<

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.