Projekt Marsuhr selbst bauen

  • 25 Antworten
  • 9946 Aufrufe

runner02

  • Gast
Projekt Marsuhr selbst bauen
« am: 31. Juli 2011, 18:23:04 »
Hallo Leute,

Ich bin dabei, mir eine Marsuhr zu bauen, damit ich immer weiß, wie spät es bei Curiosity auf dem Mars ist.

Hier würde ich das ganze dokumentieren, falls jemand sich auch sowas nachbauen will ;)

Vorläufig wird die Uhr binär sein, d.h. LEDs zeigen die Uhrzeit an.

http://www.binaer-armbanduhr.de/ablesen.html

Der aktuelle Sol wird durch einen Morsecode angezeigt, wenn man einen Taster drückt. Eventuell werde ich das ganze später mal auf einem LCD in richtigen Buchstaben und Zahlen ausgeben, aber bis dahin wird das binäre auch schon genug Herausforderung sein.

Geschrieben wird das ganze in BASCOM sein, Arbeitstier ist ein ATmega8.


Hier, das ist mal der vorläufige Quellcode, ist noch nicht debugged oder gar compiliert.
Funktionsweise:  Der Timer 1 ist ein 16-Bit-Timer und zählt daher bis zur Zahl 65536. Ich lasse den Timer aber schon bei 6942 (nicht bei 0) beginnen, und mit einer Frequenz von ~960 Hz (1 Mhz, prescaler 1024) des Chips dauert ein Überlauf des Zählers also genau eine Minute. Dann gibt er einen Interrupt, und die Variable 'minutes' erhöht sich um 1. Bei 60 min wird 'minutes' auf 0 gesetzt und 'hours' um 1 erhöht. Bei 24h 39 min 3524 Millisekunden kommt ein Sol dazu und die Uhr beginnt bei 0:00.

Mit 4 Tastern kann man die Minuten (immer +1), Stunden (+1), Sols (+1 und +100) einstellen.
Beim Drücken des 5ten Tasters wird der Sol angezeigt.


$regfile = "m8def.dat"
 $crystal = 1000000
 $hwstack = 130
 $swstack = 130

 Config Portd = Output
 Config Timer1 = Timer , Prescale = 1024
 Enable Timer1
 Dim minutes as Byte
 Dim hours as Byte
 Dim sol as Integer
 Dim tausender as Byte
 Dim hunderter as Byte
 Dim zehner as Byte
 Dim einer as Byte

 DDRD=&B11111111
 DDRC=&B11111111
 DDRB=&B11111000


 On Timer1 Isr_von_timer1

 Enable Interrupts
 Timer1 = 6942

 
     Do     ' Hauptprogramm

            if hours=24 and minutes=39
             then 
             waitms 3524
             sol=sol+1
             hours=0
            end if
       
   If Pinb.0 = 1 Then
   minutes=minutes+1   
   End If
   
    If Pinb.1 = 1 Then
   hours=hours+1   
   End If
 
 If Pind.b = 1 Then
   sol=sol+1   
   End If

 If Pinb.3 = 1 Then
   sol=sol+100   
   End If

            If Pinb.4 = 1 Then
   
           
                tausender=sol/1000
hunderter=(sol-1000*tausender)/100

zehner=(sol-1000*tausender-100*hunderter)/10

einer=(sol-1000*tausender-100*hunderter-10*zehner)



                     for i=0 to i=tausender step 1

                   Pinb.5=1
                           waitms 100
                       
                           Pinb.5=0
                           waitms 100
       
                         Next

for i=0 to i=hunderter step 1

Pinb.6=1
                        waitms 100
                       
                        Pinb.6=0
                        waitms 100
                     
                   Next


for i=0 to i=zehner step 1

Pinb.7=1
                        waitms 100
                       
                        Pinb.7=0
                        waitms 100

                    Next


                  for i=0 to i=einer step 1

Pind.7=1
                        waitms 100
                       
                        Pind.7=0
                        waitms 100

                     Next



   
             End If
           
PORTD=Bin(minutes)
PORTC=Bin(hours)
     
      Loop
      End



 Isr_von_timer1:

 Timer1 = 6942

minutes=minutes+1
 if minutes=60
   then minutes = 0
    hours=hours+1
 end if

PORTD=Bin(minutes)
PORTC=Bin(hours)


 Return


In etwa so würde sie dann aussehen, nur dass keine 3 kleinen Controller nötig sind (1 großer)



Natürlich kommt unter die LEDs eine Beschriftung zur besseren Ablesbarkeit wie hier


xwing2002

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #1 am: 01. August 2011, 10:38:25 »
Das ist eine sehr schöne Idee... zu der Du offensichtlich das technische Verständnis besitzt sie umzusetzen - was Dich von mir unterscheidet.  ;D
Überleg' doch mal, ob Du solche Uhren, in geringer Stückzahl, nicht auch zum Verkauf anfertigen könntest. Der Kreis der Marsianer im Geiste ist größer, als man gemeinhin so glaubt.

runner02

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #2 am: 01. August 2011, 12:23:56 »
Puh, verkaufen?? Ich weiß nicht...
Ich mache das ganze auf Lochrasterplatine, das ist jedes mal ein Haufen Arbeit zu löten...

Wollte ich das in Massen produzieren, bräuchte ich eine Vorlage zum Ätzen - das hat bei mir bis jetzt noch nicht geklappt am Computer.... Naja, mal schauen...
Obwohl, bei Pollin hab ich ein LCD für unter 3€ gesehen (!!), wenn ich das ansteuern könnte, bräuchte ich nicht alle diese Leds einzeln anlöten und das Werk wäre viel einfacher bzw. schneller....



Zitat
$regfile = "m8def.dat"
 $crystal = 1000000
 $hwstack = 50
 $swstack = 50

 Config Portb = Output
 Config Timer1 = Timer , Prescale = 1024
 Enable Timer1


 On Timer1 Isr_von_timer1

 Enable Interrupts
 Timer1 = 6942

 Do

 Toggle Portb.0
 Waitms 200

 ' Hauptprogramm zb. wait
 Loop
 End



 Isr_von_timer1:

 Timer1 = 6942

 Toggle Portb.1

 Return

Dieses Programm funktioniert übrigends schon. Das ist auch die Grundlage der Marsuhr - der Minutenzähler als Interrupt (jede Minute schaltet sich die LED1 an und jede zweite aus) mit irgendwas machen im Hauptprogramm. Habe die Zeiten nachgemessen, stimmen mit relativ guter Genauigkeit.

Stay tuned  ;)

 P.S. Wäre cool, wenn ich irgendwie Bilder hochladen könnte ....  :)

GG

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #3 am: 01. August 2011, 12:36:15 »
Die Opportunity-Marsuhr als App wäre leichter zu vertreiben. ;)

*

Offline redmoon

  • *****
  • 4283
Re: Projekt Marsuhr selbst bauen
« Antwort #4 am: 01. August 2011, 21:36:53 »
Hallo runner02,

lass Dir das patentieren...  ;) 

Die vergleichbaren Uhren für Spirit bzw. Opportunity : 
http://www.spiegel.de/wissenschaft/weltall/0,1518,281974,00.html 

Schöne Grüße aus Hamburg - Mirko
Nicht ewig bleibt die Menschheit auf der Erde - Konstantin Eduardowitsch Ziolkowski

runner02

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #5 am: 02. August 2011, 20:53:24 »
Hallo runner02,

lass Dir das patentieren...  ;) 

Die vergleichbaren Uhren für Spirit bzw. Opportunity : 
http://www.spiegel.de/wissenschaft/weltall/0,1518,281974,00.html 

Schöne Grüße aus Hamburg - Mirko

Digital ist die Zukunft ;)

Ob ich an dier Roverdriver ein Exemplar schicken soll, wenn sie mal hinhaut?  :D

*

Offline redmoon

  • *****
  • 4283
Re: Projekt Marsuhr selbst bauen
« Antwort #6 am: 03. August 2011, 00:49:11 »
Hallo runner02,

die würden sich ganz gewiss freuen  ;)

Aber nur eine Uhr... Das Roverdriver-Team für Spirit und Opportunity bestand in "Spitzenzeiten" ( also zu Beginn der Mission ) aus bis zu 20 Leuten, welche dabei wechselweise für beide Rover zuständig waren. Nebenbei ist ein Teil dieser Leute aber auch für andere Aufgaben am JPL eingesetzt gewesen und war/ ist nur bei Bedarf in die MER-Mission eingebunden...

Schöne Grüße aus Hamburg - Mirko
Nicht ewig bleibt die Menschheit auf der Erde - Konstantin Eduardowitsch Ziolkowski

runner02

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #7 am: 05. August 2011, 08:40:15 »
So, der Compiler spuckt keine Fehlermeldung mehr aus, also müsste der Code hinhauen.

Jetzt 'nur noch' die Schaltung aufbauen, und schauen, obs schon auf Anhieb klappt ;)

runner02

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #8 am: 06. August 2011, 12:20:06 »
Ok, habe die Schaltung auf Steckplatine teilweise aufgebaut, aber komischerweise leuchtet D4 ohne Grund...

Habe auch im Code noch eine Kleinigkeit gefunden.

Ich denke, ich werde aus dem Code mal die Sols und alles weitere vorerst Unnötige rausnehmen, um zu sehen, wo der Fehler liegt...

~Umlaufbahn~

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #9 am: 07. August 2011, 11:00:27 »
Eine tolle Idee!!!!!! Gratuliere!  :)

Aber verstehe ich es richtig, wenn das ganze als Armbanduhr geplant ist?
Interessant fände ich diese Uhr zbsp auch eingebaut in ein Mars-Relief, das aus Gips modelliert ist und sich dann als Wand-Deko aufhängen läßt...

Ich habe viele Jahre lang beruflich Gips-Modelle hergestellt, deswegen fällt mir so ein Mars-Relief spontan zu dieser Uhr ein.  ::)

runner02

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #10 am: 07. August 2011, 13:00:36 »
Eine tolle Idee!!!!!! Gratuliere!  :)

Aber verstehe ich es richtig, wenn das ganze als Armbanduhr geplant ist?
Interessant fände ich diese Uhr zbsp auch eingebaut in ein Mars-Relief, das aus Gips modelliert ist und sich dann als Wand-Deko aufhängen läßt...

Ich habe viele Jahre lang beruflich Gips-Modelle hergestellt, deswegen fällt mir so ein Mars-Relief spontan zu dieser Uhr ein.  ::)


Naja, da die elektronischen Bauteile sehr klein sind, könnte man sie theoretisch auch als Armbanduhr konzipieren. Vorerst mache ich aber einfach eine kleine Platine, da könnte man natürlich ein relief drübermachen zur Optik...

Wie auch immer, zuerst muss mal der Code stimmen ;)
Ich werde das Programm aus Beitrag 3 sukzessive so verändern - Schritt für Schritt - wenn alles klappt, dann die Erweiterung. Denn ab einer gewissen Codelänge wird es immer schwieriger, da eine einzelne Fehlerquelle auszumachen...

Gott sei Dank ist es ja noch ein Weilchen hin bis zum Start von Curiosity, das ist meine Zeitvorgabe ;)

runner02

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #11 am: 09. August 2011, 11:01:09 »


Hier habe ich etwas ähnliches gefunden, nur mit einer Erduhr. Die außerdem auch noch die Sekunden anzeigt...

runner02

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #12 am: 16. August 2011, 11:24:17 »
Hab neulich einen bekannten Elektroniker angefordert, dass er mir hilft den LCD anzuschließen+anzusteuern...

Ich denke, das ist besser als ne Binäruhr, weil dann jeder die Zeit ablesen kann, außerdem könnte man das dann auch einfach mit einem Temperatursensor etc. erweitern.

Ist zwar anfangs ein bisschen komplizierter als nur LEDs anzusteuern, dafür lässt sich dann aber alles in Zeichen, Buchstaben, Zahlen, Sonderzeichen, etc. ausgeben...

runner02

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #13 am: 08. September 2011, 17:38:42 »
Hey Leute, gute Nachrichten!

Heute war der Elektroniker da - und siehe da: das LCD läuft ja...

Es schrieb zwar "Hallo wel_ shift" (Hallo welt - für die's nicht wissen: Der Standart-Test beim Ersten Programm obs richtig ausgegeben wird) , weil der Code für ein zweizeiliges war.

Jedenfalls besorg ich mir jetzt ein zweizeiliges (statt dem einzeiligem), und wenn das klappt ist der Rest ein Klacks ;)

runner02

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #14 am: 15. September 2011, 08:28:19 »
Es geht weiter.
Mit neuem, doppelzeiligen LCD.


Folgendes wird bereits angezeigt:

 MSL local Time
 12:12 Sol 1234

aber die Ziffern springen wie wild herum, überschreiben den Sol und dann heißt es 4455466264542 und Bruchteile einer Sekunde später 874554268 usw. da ist noch ein Fehler drin... Ich arbeite halt noch daran ;) aber der Zeitpunkt der Landung auf dem Mars ist ja eh noch ein Weilchen hin ;)

xwing2002

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #15 am: 15. September 2011, 15:56:47 »
Ohne Komplikationen wäre es kein für die Raumfahrt typischer Vorgang!  ;D
Also einfach den längeren Atem haben als die Fehler, ich bin sehr sicher, dass Deine Hartnäckigkeit sich durchsetzen wird.

Ich will Dich da wirklich nicht indoktrinieren (naja, ein bißchen vielleicht...), aber stell' Dir mal vor Du bist erfolgreich, Du hast es geschafft und Du weißt wie diese Uhr gebaut werden muss.
"Umlaufbahn" fertigt eine Marslandschaftsschablone, sodass man relativ unkompliziert Marslandschaften gießen kann. In der Abteilung Modelbau finden wir vielleicht auch noch ein Talent, dass den Rover bauen kann. Die Uhr wird in die Landschaft eingelassen, der Rover auf den "Mars" gesetzt, das Ganze kommt unter Plexiglas... weißt Du, was Liebhaber des roten Planeten für diese Schreibtisch-Deko ausgeben würden??  :D
Wir bauen einen Raumfahrer.Net-Shop auf... wir vertreiben das Schmuckstück weltweit. Wir finanzieren damit Raumcon-Treffen, mehr Server-Kapazität... den Überschuß investieren wir in Werbespots... das bedeutet noch mehr Verkauf und riesige Publicity für diese Website... hmmmm, ich weiß, manchmal muss man mich ausbremsen...  ;D
Was ich damit eigentlich sagen will ist: ich finde Deine Idee Spitze, verfolge den Bau sehr interessiert und bin sicher, dass ganz viele diese Uhr ebenso toll finden. ;)

*

Offline -eumel-

  • Moderator
  • *****
  • 15218
Re: Projekt Marsuhr selbst bauen
« Antwort #16 am: 15. September 2011, 16:06:49 »
Jetzt schießt Du aber doch etwas über das Ziel hinaus!
Raumfahrer.net ist nicht kommerziell und kostenlos - und so wird es auch bleiben.
Hier gibt es auch keine Werbung.

xwing2002

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #17 am: 15. September 2011, 16:25:21 »
Ich weiß. :D
Ich sag' ja... manchmal muss man meine Gedankenspielereien mit dem Lasso zur Raison bringen.
Aber die Uhr würde ich kaufen...  ;)

Hendrik

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #18 am: 15. September 2011, 19:13:33 »
Jetzt schießt Du aber doch etwas über das Ziel hinaus!
Raumfahrer.net ist nicht kommerziell und kostenlos - und so wird es auch bleiben.
Hier gibt es auch keine Werbung.
Vielleicht keine Werbung, aber Anzeigen. Schau mal rechts in dem Kasten.

*

Offline -eumel-

  • Moderator
  • *****
  • 15218
Re: Projekt Marsuhr selbst bauen
« Antwort #19 am: 15. September 2011, 19:27:51 »
Vielleicht keine Werbung, aber Anzeigen.

Anzeige. Eine kleine themennahe Anzeige hilft uns etwas bei der Finanzierung des Servers.
Und dabei soll es auch bleiben.
Eine Ausnahme bestätigt die Regel! ;)
Würden wir Werbung zulassen, wäre hier alles voll davon und wir würden kaum noch Inhalte finden.

runner02

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #20 am: 21. September 2011, 17:11:05 »
Ich habe eine großartige Nachricht zu verkünden:


Sie geht endlich!!!


Ich poste mal den vollständigen Code:




Zitat
$regfile = "m8def.dat"                                      ' specify the used micro
$crystal = 1000000                                          ' used crystal frequency
$baud = 19200                                               ' use baud rate
$hwstack = 150                                              ' default use 32 for the hardware stack
$swstack = 150                                              ' default use 10 for the SW stack
$framesize = 60                                             ' default use 40 for the frame space



'note : tested in PIN mode with 4-bit

Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6


Dim A As Byte
Config Lcd = 16 * 2                                         'configure lcd screen

'other options are 16 * 4 and 20 * 4, 20 * 2 , 16 * 1a
'When you dont include this option 16 * 2 is assumed
'16 * 1a is intended for 16 character displays with split addresses over 2 lines




 Config Timer1 = Timer , Prescale = 1024
 Enable Timer1
 Dim Minutes As Byte
 Dim Hours As Byte
  Dim Minutes10 As Byte
 Dim Hours10 As Byte
  Dim Minutes1 As Byte
 Dim Hours1 As Byte
 Dim Sol As Integer
 Dim Tausender As Byte
 Dim Hunderter As Byte
 Dim Zehner As Byte
 Dim Einer As Byte
 Dim I As Byte
 Dim Minuteshelp As Byte
 Dim Hourshelp As Byte
 Minutes = 0
 Minutes10 = 0
 Hours10 = 0
 Hours = 0
 Sol = 1

 Ddrd = &B00000000                                          'input D



 On Timer1 Isr_von_timer1

 Enable Interrupts
 Timer1 = 6942

 Cls                                                        'clear the LCD display

Lcd "Mars Local Time"

Wait 2

Cls                                                         'clear the LCD display

Lcd "MSL Curiosity"

Do

If Pind.0 = 0 Then
Minutes = Minutes - 1
End If

If Minutes > 59 Then
    Minutes = 0
    Hours = Hours + 1
 End If



 If Pind.1 = 0 Then
Minutes = Minutes + 10
End If

   If Pind.2 = 1 Then
   Hours = Hours + 1
   End If

 If Pind.3 = 1 Then
   Sol = Sol + 1
   End If

 If Pind.4 = 1 Then
   Sol = Sol + 100
   End If

Minutes10 = Minutes / 10
Minuteshelp = Minutes10 * 10
Minutes1 = Minutes - Minuteshelp

Hours10 = Hours / 10
Hourshelp = Hours10 * 10
Hours1 = Hours - Hourshelp


                                 




Locate 2 , 0                 'select the lower line
                                             

Lcd Str(hours10)           'Ausgabe Stunden, Minuten, Sol
Lcd Str(hours1)
Lcd ":"
Lcd Str(minutes10)
Lcd Str(minutes1)
Lcd "  Sol "
Lcd Str(sol)
Cursor Off Noblink



Wait 1


If Hours = 24 And Minutes = 39 Then      'bei vollem Sol umschalten

      Waitms 3524
      Sol = Sol + 1
      Hours = 0
      End If


If Hours >= 25 Then      'falls man mit dem Taster versehentlich zu viel drückt (ist mir passiert ;) )

Hours = 0
Sol = Sol + 1
End If

      Loop




      Isr_von_timer1:

 Timer1 = 6942

 Minutes = Minutes + 1





 Return


End


Somit kann sich jetzt jeder, der nen Atmega8, ein paar Kabel und einen 2*16 zeiligen LCD herumliegen hat, eine funktionsfähige Marsuhr bauen!!



So sieht die Anzeige als fertige aus:
_________________
 MSL Curiosity
 08:23  Sol 1253
_________________

Ich werde das ganze jetz mal von der provisorischen Steckplatine auf Lochrasterplatine löten, dann sieht die ganze Apperatur gleich mal um einiges besser aus ;)

Mit 5 Tastern kann man übrigens Zeit und Datum einstellen.

Minute -1     (Portd.0)
Minute +10  (Portd.1)
Hour+1       (Portd.2)
Sol +1        (Portd.3)
Sol +100   (für später, sonst müsste man bei Sol 1000 tausend mal drücken!  ;D  Portd.4)

klausd

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #21 am: 21. September 2011, 17:27:56 »
Was nutzt Du denn zum programmieren? AVR Studio? Assembler ist das aber ja nicht wirklich oder? Woher kommen denn sonst die if's? Mein ATMEGA8 kann zumindest kein if bearbeiten sondern da muss man mit Statusregistern und branchequal und Sprüngen, Unterprogrammen usw arbeiten.

Gruß, Klaus

xwing2002

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #22 am: 21. September 2011, 17:29:09 »
Ich habe keine Ahnung von dem technischen background, den Du gerade ausführst... aber ich gratuliere Dir sehr sehr herzlich zu dem Durchbruch... und warte auf erste Bilder des gelöteten Prototyps. ;)

runner02

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #23 am: 21. September 2011, 17:41:16 »

Was nutzt Du denn zum programmieren? AVR Studio? Assembler ist das aber ja nicht wirklich oder? Woher kommen denn sonst die if's? Mein ATMEGA8 kann zumindest kein if bearbeiten sondern da muss man mit Statusregistern und branchequal und Sprüngen, Unterprogrammen usw arbeiten.

Früher habe ich immer mit dem MyAVR workpad (in C) programmiert.
Die Programmierung ist damit sehr übersichtlich und Hardware-Nah.

Als ich damit dann UART (Kommunikation zwischen Chips) und LCD nutzen wollte, wurde das sehr schwierig.
Darum programmiere ich jetzt in BASCOM-AVR. Die Sprache ist ähnlich zu Basic, nur auf Mikrocontroller optimiert.

Wie man oben sehen kann, muss man z.B. nur Lcd "...." eingeben und er schreibt es. In C müsste man verschiedene Register aufrufen, und das alles zu eruieren ist mir nicht gelungen.  (BASCOM ist eine sehr gute Hochsprache, der "Nachteil" ist dabei nur, dass man eben die Register nicht mehr kennt, die man für den LCD aufrufen müsste. Das läuft alles wie in einer Blackbox - deutlichst vereinfacht. )



Assembler ist mir dann doch zu kompliziert  ;)  ::)


So sieht in etwa die Entwicklungsumgebung aus (nur eine neuere Version)

http://www.mcselec.com/

klausd

  • Gast
Re: Projekt Marsuhr selbst bauen
« Antwort #24 am: 21. September 2011, 18:54:37 »
Erfolgreich vor Assembler gedrückt   8)

Trotzdem schönes Bauprojekt. Mal sehn ob ich irgendwann nochmal was mit meinem ATMEGA8 mache.

Gruß, Klaus