GLCD und I2C (TWI) am Atmega32

Hallo,


ich schaue mir jetzt das Dino-Programm an und sehe schon, was er mit Hardware-I2C meint. Jetzt gebt mir mal ein bischen Zeit, ich mach´ das schon.


Viele viele Grüße an Euch beide, DW
 
Noch was zu "Taster auswerten", nur damits klar wird:
-ob Du das Bein mit `nem externen Pullup versiehst, und über den Taster nach Gnd ziehst ( 0 ist gedrückte Taste), oder mit 'nem externen Pulldown versiehst, und über den Taster nach Vcc ziehst (1 gleich Tastendruck) ist egal. Aber der Vorteil mit dem Pullup ist, daß du den internen anschalten kannst, und somit gar keinen externen Widerstand brauchst...
-da die main-loop der Programme üblicherweise zig(tausend)mal pro Sekunde durchläuft, kann man sich das Warten auf einen Tastendruck sparen. Einfach bei jedem durchlauf das entsprechende Pin-Register-Bit (if ... then) pollen - so kurz kannst Du gar nicht tasten, daß das übersehen wird. Zum software-Entprellen gibts dann auch bessere Lösungen, als zu warten. Letztendlich gehts ja darum, eine gewisse Zeit lang den Taster "zu sperren". Wenn man also ein flag "Taste gesperrt" beim Tastendruck setzt, es beim abfragen mit auswertet, muß man es nur regelmäßig wieder löschen. ZB über einen bereits verwendeten Timer oder so.
-Wenns wirklich zeitkritisch wird, kann man auch einen externen IRQ verwenden (die aktuelleren µC können ja auf jedem Bein einen Pin Change Interrupt auslösen) - dann gilt natürlich wieder die Regel, die Zeit in der ISR kurz zu halten
 
und jetzt: Ärmel hoch!

Na fein, dass ich gleich noch ein paar Infos bekomme, danke LotadaC! Wie gesagt, ich werde erst mal ein wenig am Programm arbeiten. Kann sicher ein oder zwei Wochen dauern. Ich möchte aber nicht versprechen, dass Ihr so lange von mir verschont bleibt, vielleicht taucht doch mal eine Frage auf. Aber es gibt ja noch genug Hilfebedürftige, während es bei mir eher Hausaufgaben sind.

Ich melde mich auf jeden Fall wieder, bis dann, DW
 
Hallo,

ich möchte den Namen einer Variablen als LCD-Text ausgeben, etwa so:

Dim Meinvariablenname as (Typ) 'Quell-Variable, welche eigentlich nur innerhalb des Programmes verwendet wird
Dim Anzeigevariable as (Typ) ' Ziel-Variable, welche angezeigt werden soll
Anzeigevariable = (gesuchter Befehl) Meinvariablenname ' Konvertierung
Lcdat 1 , 1 , Anzeigevariable , 0 ' Anzeige auf GLCD

Geht so etwas?

Viele Grüße, DW
 
Hi,

ich möchte den Namen einer Variablen als LCD-Text ausgeben,
warum denn das ? Im Atmel sind die Variablennamen sowieso Schall und Rauch. Im Bin-File was du in den Atmel programmierst sind es sowieso nur noch Speicheradressen. Da ist kein einziger Variablenname oder Sprunglabel aus deinem Programm mehr drin.

Gruß
Dino
 
Hi Dino,

ich möchte ein Menü erstellen. Die Variablen werden innerhalb des Programmes genutzt und ich will dann z.B. auf der Menüseite 1 folgendes anzeigen:

Variablenname1 , Variablenwert1

und auf Seite 2 dieses:

Variablenname2 , Variablenwert2

usw., bis etwa Seite 12.



Den VariablenWERT will ich im Menü ändern (und dann im EEPROM abspeichern), den VariablenNAMEN will ich deshalb anzeigen, weil ich ja wissen will, was ich gerade im Menü ändere. Immerhin habe ich ein 128x64er Display, also genug Platz. Ich will eine Schleife nutzen, die immer nur die Namen und Werte der anzuzeigenden Infos aus dem Programm holt, anstatt sie nochmals von Hand als Text zu hinterlegen. Aber wie Du sagst, wird das wohl nicht gehen. Vielleicht geht das mit einem Data-Block noch am besten, wenn ich dort den Text ablege. Aber überleg´ ruhig nochmal, vielleicht fällt Dir doch was ein.


Danke, DW
 
Hallo !

Ich bin auch Dino`s Meinung.....
Deine Variablennamen existieren nur bis zum Kompilieren des Programms.
Danach wird alles in Speicheradressen geändert.

Letztlich sind deine Variablennamen also nichts weiter als Aliasbezeichnungen für einen Speicherbereich.
Deutlich wird dies, wenn du z.B. über ein Overlay nachdenkst.

Beispiel:
Code:
Dim A As Word

Dim B(2) As Byte At A Overlay

Welchen Namen hat deine Variable denn nun? :hmmmm:
Vielleicht A ?
Oder B1?
Oder doch B2?

Du wirst also um ein Klartextmenü nicht drum herum kommen......
und um separate Variablen für bestimmte Werte auch nicht.

Hast du dir das kleine Menu und den Thread mal angesehen, welchen ich dir im Beitrag #19 verlinkt hatte?

Grüße,
Cassio
 
Hi,

Ich will eine Schleife nutzen, die immer nur die Namen und Werte der anzuzeigenden Infos aus dem Programm holt, anstatt sie nochmals von Hand als Text zu hinterlegen. Aber wie Du sagst, wird das wohl nicht gehen. Vielleicht geht das mit einem Data-Block noch am besten, wenn ich dort den Text ablege. Aber überleg´ ruhig nochmal, vielleicht fällt Dir doch was ein.
da gibts nichts einzufallen :rolleyes: wo nix ist kann man auch nix herzaubern. Bei nem Interpreter im PC wirst du die wohl noch sehen. Bei nem "Halbcompilat" wie zB bei Java wo das Programm so ein Mittelding zwischen Binär und Interpreter ist könnte man eventuell auch noch was finden. Spätestens wenn du ein richtig kompiliertes Programm hast (Assembler, C, Bascom, ...) wirst du keine Variablennamen in der ausführbaren Datei mehr finden. Warum auch. Sie würden das Programm ja nur aufblähen und hätten keinen wirklichen Nutzen. Du kannst also nur die Variablennamen irgendwie (DATA, einzelne Textausgaben, wie auch immer) im Programm als Daten reinsetzen damit du sie in die LCD-Anzeige bekommst.

Gruß
Dino
 
Hallo,

ok, ok, hab´s kapiert. Klingt nicht nur logisch; da hätte ich auch selbst drauf kommen können.

Ansonsten komme ich voran. Es ist schon ein wenig Schinderei, von dem Goto weg zu kommen, aber es geht so langsam. Es wirkt irgendwie aufgeräumter, aber manchmal habe ich Probleme, den alten Faden neu zu spinnen. Den Regelkreis habe ich schon durch, und jetzt schraube ich am Menü rum, wie Ihr ja schon erfahren habt. Und natürlich habe ich den Beitrag gelesen, den Cassio mir empfohlen hat und nicht nur das, er hat auch schon geholfen. Und nicht zuletzt sind die Beiträge auch manchmal amüsant, die aus diesem Thema eingeschlossen. Ich find´s Klasse, dass Ihr das mit Humor tragt und die Antworten dennoch sachlich bleiben. Nun bin ich erst mal in Nürnberg zur Messe, aber dann geht es weiter.

Viele Grüße, DW
 
Hallo DW!

Ich hatte dich ja vorgewarnt, dass es eine schei... Arbeit ist, alles umzustellen. :cool:
Finde es aber gut, dass du dir die ganze Arbeit machst und nicht zwanghaft an der alten Weise festhältst.

Das Menü eines Programms ist ein nicht zu unterschätzender Bereich.
Er kostet meistens einiges an Hirnschmalz, damit hinterher die Displayausgabe und das Navigieren zusammen passen und "nebenbei" das Programm seine eigentliche Arbeit auch noch fehlerfrei verrichten soll.

Ich fange daher meistens mit dem Menü und dem "Layout" an.
Wie soll es aussehen?
Was soll dargestellt werden?
Welche Anzeigen muss ich permanent aktualisieren und welche nicht!
Nebenbei versuche ich dann immer den Programmablauf zu berücksichtigen.

Meistens versuche ich immer ein bestimmtes Muster einzuhalten, aber das gelingt mir leider nur teilweise.
Schließlich hat jedes neue Programm auch wieder neue Schwerpunkte und das lässt sich nun mal nicht mit einem "Subroutinen-Baukasten" erstellen. :wink:

Ich drück dir jedenfalls die Daumen, dass du weiterhin so gut voran kommst.

Grüße,
Cassio
 
Hallo,


ich möchte mal was zur RTC von Dallas fragen, zur DS1307: was macht der Weekay? Irgendwie vermisse ich eine sinnvolle Funktion, oder ich mach´ was falsch.

Wenn ich eine Uhrzeit sende und damit die RTC stelle, z.B. 23:59:50 am 7.3.12 und als Wochentag 6, dann lese ich nach "Mitternacht" als Wochentag eine 7. Schicke ich vorher eine 1, erhalte ich eine 2! Hat das Ding keinen eigenen Kalender, wo es erkennt, welcher Wochentag wirklich ist? Wer tickt nicht richtig, die RTC oder ich?


Danke Euch schon mal, DW


Edit: ja, ich merke schon, Ihr wollt bestimmt wieder einen Codeschnipsel. Ich kümmere mich drum, bis gleich...
 
Hallo!

Irgendwie verstehe ich deine Frage nicht....... :hmmmm:

Für mich klingt es logisch, dass nach Mitternacht der Wochentag sich um Eins erhöht. :wink:
Ob die RTC aber die Wochhentage von 0-6 oder von 1-7 zählt kann ich dir jetzt leider nicht sagen.
Deiner Aussage nach zählt sie aber wohl von 1-7.

Grüße,
Cassio
 
Hallo,

der Wochentag wird von 1-7 gezählt. Im Datenblatt habe ich nichts gefunden das der Wochentag von der RTC aus dem Datum generiert wird. Er wird wohl lediglich beim Tageswechsel weitergezählt.

Auch bei der relativ neuen RTC RV-3029-C2 mit allem möglichen Gedöns drin habe ich nichts gefunden was auf eine automatische Wochentagsberechnung hindeutet.

Gruß
Dino
 
Hallo!

Aha.... ich glaube jetzt weiß ich, was du meinst.....

Du stellst die RTC auf 07.03.2012 und behauptest, es wäre ein Samstag..... obwohl es ein Mittwoch ist.

Nun hast du gedacht, dass die RTC um Mitternacht deinen Fehler bemerkt und dies automatisch korrigiert..... und dann Donnerstag ausgeben müsste.

Da muss ich dich enttäuschen!
Dies weiß die RTC nicht.
Sie zählt die Sekunden, Stunden, Tage.... und so weiter aufwärts, unter Berücksichtigung der Schaltjahre.
Das war es dann aber auch schon.

Habe ich eine Frage jetzt richtig verstanden?

Grüße,
Cassio
 
Hi Cassio,


schön, dass Du gerade da bist. Mein Problem ist, dass z.B. der 7.3.12 ein Mittwoch ist, demzufolge sende ich eine 3. Nach Mitternacht ist Donnerstag, also kommt eine 4 zurück. Soweit, sogut. Wenn ich der RTC aber keine 3, sodern eine andere Zahl sende, dann zählt er die einfach nur hoch, ohne zu schauen, ob es stimmt. Ist das DS1307-typisch? Aber der Vollständigkeit halber hier mein Codeschnipsel:

Code:
.
.
'Schnipp
.
.

' Uhrzeit-Variablen
Dim _weekday As Byte
Dim _day As Byte
Dim _month As Byte
Dim _year As Byte
Dim _sec As Byte
Dim _min As Byte
Dim _hour As Byte

'Dim Ds1307w As Byte
'Dim Ds1307r As Byte

Const Ds1307w = &B11010000
Const Ds1307r = &B11010001

_weekday = 6
_day = 31
_month = 12
_year = 11
_sec = 40
_min = 59
_hour = 23



_sec = Makebcd(_sec)
_min = Makebcd(_min)
_hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop


_day = Makebcd(_day)
_month = Makebcd(_month)
_year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 3
I2cwbyte _weekday
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop

.
.
' hier ist noch anderer Kram dazwischen
.
.


   Cls
   Lcdat 2 , 1 , _sec ; " " ; _min ; " " ; _hour ; " " ; _weekday ; " " ; _day ; " " ; _month ; " " ; _year , 0
   Wait 1

   I2cstart
   I2cwbyte Ds1307w
   I2cwbyte 0
   I2cstart
   I2cwbyte Ds1307r
   I2crbyte _sec , Ack
   I2crbyte _min , Ack
   I2crbyte _hour , Ack
   I2crbyte _weekday , Ack
   I2crbyte _day , Ack
   I2crbyte _month , Ack
   I2crbyte _year , Nack
   I2cstop

   Lcdat 4 , 1 , _sec ; " " ; _min ; " " ; _hour ; " " ; _weekday ; " " ; _day ; " " ; _month ; " " ; _year , 0
   Wait 10
. 
.
'und dann gehts weiter...


Das ist eigentlich ganz normaler Standard und funktioniert auch so. Nur der Wochentag will nicht.

Die oberen Zeilen legen die Variablen fest, geben ihnen Werte und schreiben sie in die RTC.
Die unteren Zeilen lesen zuerst die RTC aus, also das, was zuvor hineingeschrieben wurde. Dann lese ich wieder aus, nur nochmal so, um zu sehen, was passiert. Und der Wochentag ist mit einer Chance von 1:7 richtig. Dabei kann das Ding sogar das Schaltjahr berechnen! Und nochwas, die Zahlen sind alle binär, aber das stört für den Test nicht, weil der Wochentag nur 1...7 hat und da ist binär = BCD.

Danke, DW
 
Hallo,


und wo wir gerade bei RTCs sind: gibt es denn eine, die Sommer-Winterzeit beherrscht? Das mit dem Schaltjahr ist ja schön und gut, aber das brauche ich nur alle 4 Jahre. Im gleichen Zeitraum muss ich 8mal die Uhrzeit ändern, 4mal eine Sunde vor und 4mal eine zurück. DAS wäre doch wichtiger, oder? Kennt Ihr eine, die das kann?


DW
 
Nur der Wochentag will nicht.


Hallo DW!

Doch.... der Wochentag will auch! :wink:


Wenn du der RTC mitteilst, dass es 12:34:56 ist.............. dann ist das so und sie rechnet von da an weiter!
Auch wenn es in Wahrheit 22:43:00 ist.... das weiß die RTC ja auch nicht. :wink:

Wie schon geschrieben....
Die RTC zählt möglichst genau die Uhrzeit (und damit auch das Datum) weiter.
Mehr nicht!

Grüße,
Cassio
 
......gibt es denn eine, die Sommer-Winterzeit beherrscht?


Hallo DW!

Das ist mir nicht bekannt!
Es fragt sich ja dann auch...... welchen Sommer- und Winterzeitwechsel sieht kennen soll?
Alle auf der Welt? :hmmmm:

Die DST (Daylight Saving Time) gibt es ja LEIDER nicht nur in Deutschland bzw. Europa!
In manchen Ländern wird die Zeit sogar um 2 Stunden vor bzw. zurück gestellt!
Außerdem differiert sogar noch das Datum und die Uhrzeit, wann die Uhren umgestellt werden.

Sorry, aber das ist nun wirklich eine Aufgabe für den Programmierer.... und nicht für eine RTC!


Wenn du das lästige Umstellen automatisieren möchtest, dann nimm einen DCF77-Empfänger! :wink:


Grüße,
Cassio
 
Hallo Cassio,

naja, soooo viele Möglichkeiten zur SoWi-Umschaltung gibt es ja nicht. Denke ich zumindest. Man könnte das so lösen, dass man der RTC über ein Config-Byte sagt, nimm für Sommer das Wochenende X und für Winter das Wochenende Y. Es wird doch überall von Samstag zu Sonntag stattfinden. Und wenn es nicht passt, sollte man es deaktivieren können. Aber von Dallas liest das hier eh´ keiner mit.... Da bleibt es wieder an uns hängen.

Und mit dem Wochentag muss ich wohl leben. Ich bin ja später derjenige, der es bedient. Ich werde doch nicht Dienstag hinschreiben, wenn Donnerstag ist. Oder doch??? Ich hänge ein Logbuch daneben!


Danke, DW
 
Ich werde doch nicht Dienstag hinschreiben, wenn Donnerstag ist. Oder doch???


Hallo DW!

Nun ja, für ähnlich unkonzentrierte Personen wie dich (soll nur ein Spaß sein), gibt es in BASCOM extra:
DAYOFWEEK()
:cool:

Damit musst DU gar nicht mehr selber nachschauen, welcher Wochentag gerade ist. :wink:

Selbst bei DCF77 bekommst du den Wochentag mitgeliefert..... und die Sommerzeit...... und sogar noch die zusätzliche Schaltsekunde!
Denn mit dem einen Tag alle 4 Jahre ist es nun mal leider nicht getan.

Grüße,
Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)