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...
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!
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
>> 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.
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.
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.
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?
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
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.
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.
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?
"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.
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?
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.
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 :/
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?
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?
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
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 :)
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.
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.
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
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.
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!
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.
>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.
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.
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.
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.
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
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.
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.
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.
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!
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
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
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 :-).
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?
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.
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.
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
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
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?
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 :/
> 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.
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.
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)
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.
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
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:
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
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
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.
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.
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?
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.
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.
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=?
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.
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.
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.
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.
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?
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...
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
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.
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
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.
@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 :)
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!
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.
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ß
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
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.
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! :)
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?
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.
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...
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 ;)
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.
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.
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...
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.
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...
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?
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
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.
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?
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.
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.
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".
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.
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
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.
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.
>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.)
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.
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.
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'
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
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.
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.
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 :/
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?
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 ------------+
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.
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.
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.
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
...
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!
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.
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.
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
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
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.
> 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.
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
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
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'.