Go Down

Topic: GEOGPS - Projektvorstellung (Read 1 time) previous topic - next topic

DE8MSH

Apr 25, 2011, 06:49 pm Last Edit: Apr 27, 2011, 01:04 pm by DE8MSH Reason: 1
Hallo,

so langsam nähere ich mich einem echtem Projekt namens GEOGPS. Es wird ein GPS Gerät werden, welches auf das Geocaching zugeschnitten ist. Es wird ein Positionslogger mit SD Card haben, Cachepositionen von SD Card lesen können etc.

Leider musste ich wieder etwas zurückrudern: der SD Card Adapter verlor einige Beine beim beim Löten :) Passiert nun mal, auch wenn es dahingehend ärgerlich ist, da es schonmal lief :)

Hier ein erstes Demovideo, wo das Gerät noch nicht im Gehäuse ist:

http://www.youtube.com/watch?v=Iu2yxFK9CQ8&fmt=22
Links die ATmega328 Platte, rechts der 1100mAh Akku. Oben das Nokia 3310 Shield.

Hier mit angeschlossenem EM 406 A:

http://www.youtube.com/watch?v=Xr7tcuvpO-Y&fmt=22

Hier im Gehäuse - man sieht schön den Blütenstaub :) :

http://www.youtube.com/watch?v=serqO9UUHmQ

Habe nochmal eine neue Funktion eingebaut: Cacheradar. Ist noch mit fixen Werten, weil ich den ATmega328 immer zwischen Arduino Uno und DIY Platine hin-und-herstecke und am Arduino Uno kein GPS angeschlossen habe.

http://www.youtube.com/watch?v=d-ApUNOhmEY



Einige Menüs sind momentan noch ohne Funktion. Werden es aber bald sein :)



BTW: Wenn jemand von Euch Nokia 3310 Display Eigentümern eine Idee hat wie ich einen 3x5 Font auf das Nokia 3310 Shield bekomme wäre ich sehr dankbar! Ich benötige das für die GPX Beschreibung der Caches von geocaching.com.

Look at
http://de8msh.blogspot.com/
and
http://www.youtube.com/user/de8msharduino

gloob

Sieht sehr gut aus. Kannst du sagen was das Gelbe da auf dem Joystick vom Shield ist?
http://www.panoduino.de

DE8MSH

#2
Apr 25, 2011, 07:53 pm Last Edit: Apr 25, 2011, 08:00 pm by DE8MSH Reason: 1
Hi gloob,

danke Dir. Ja, das Gelbe ist ein Platiskteil, welches ich aus einem Gehäuse abgeschnitten habe. Das sind die "Gnubbel", in die man die Platinen mit Schrauben schraubt. Ich habe keine Ahnung, wie die "Dinger" heißen. Das habe ich dann mit Kleber auf den Stick geklebt.

Aber ACHTUNG: den Kleber nur sehr vorsichtig benutzen, sonst läuft er in den Stick und nichts geht mehr!
Look at
http://de8msh.blogspot.com/
and
http://www.youtube.com/user/de8msharduino

Joghurt

Wenn jemand von Euch Nokia 3310 Display Eigentümern eine Idee hat wie ich einen 3x5 Font auf das Nokia 3310 Shield bekomme wäre ich sehr dankbar!


Also ich machs ohne Library, da ist es kein Problem. Mit Library weiß ichs nicht...

DE8MSH


Wenn jemand von Euch Nokia 3310 Display Eigentümern eine Idee hat wie ich einen 3x5 Font auf das Nokia 3310 Shield bekomme wäre ich sehr dankbar!


Also ich machs ohne Library, da ist es kein Problem. Mit Library weiß ichs nicht...


Meine Idee wäre eine Bitmap, die alle Zeichen x 4px Breit /6px hoch ist. Dann in .h umwandeln. Momentan weiß ich nicht, die ich die Routine bastel. Die LIB ist kompliziert gemacht, finde ich.
Look at
http://de8msh.blogspot.com/
and
http://www.youtube.com/user/de8msharduino

Joghurt

Du kannst Dir gerne hier die aktuellste Version meines aktuellen Projekts ansehen, die das 3310 direkt anspricht.

Und zur korrekten vertikalen Positionierung würde ich einfach das entsprechende Bitmap-Byte shiften.

DE8MSH

Hi Joghurt,

ich versuche mal mein Glück. Danke Dir.
Look at
http://de8msh.blogspot.com/
and
http://www.youtube.com/user/de8msharduino

DE8MSH

#7
Apr 26, 2011, 12:26 pm Last Edit: Apr 26, 2011, 12:31 pm by DE8MSH Reason: 1
Hallo,

ich habe doch die original Library hingehackt. Nun kann ich einen 3x5 Font aus der Sammlung von Benedikt K. (µC-Forum / font.zip aus http://www.mikrocontroller.net/topic/54860) anzeigen:



Look at
http://de8msh.blogspot.com/
and
http://www.youtube.com/user/de8msharduino

Joghurt

Aber es fehlt noch der Umbau auf acht Zeilen; oder wolltest Du nur den kleineren Font...?

DE8MSH

Das stimmt. Da habe ich jetzt gar keinen Plan wie ich das mache... Macht das Display nicht immer nur sechs Zeilen wg. der Bänke?
Look at
http://de8msh.blogspot.com/
and
http://www.youtube.com/user/de8msharduino

Joghurt

#10
Apr 26, 2011, 12:59 pm Last Edit: Apr 26, 2011, 01:03 pm by Joghurt Reason: 1
Ich weiß jetzt nicht wie die Library das macht. :(

Ich würde bei mir (ich habe ein Array mit 504 Bytes (welches das Display repräsentiert, quasi ein FrameBuffer) welche nacheinander die sechs einzelnen Zeile füllen) das entsprechende vertikale Byte des Buchstaben und die gewünschte Y-Koordinate nehmen, das Byte in zwei Variablen packen, passend shiften und aufs Display ODERn.

Ungefähr so:

Also die "obere" Variable um sechs Positionen nach unten shiften und die "untere" um die restlichen zwei (muss insgesamt 8 ergeben)  nach oben.

DE8MSH

Ok, verstanden. Aber wie umsetzen? Die LIB hat diese (angepasste) Funktion:

void Nokia_3310_lcd::writeMiniChar(unsigned char ch, char mode) {
   unsigned char j;
 
     if (cursor_col > LCDCOLMAX - 4) cursor_col = LCDCOLMAX - 4; // ensure space is available for the character
     if (cursor_row > LCDROWMAX - 1) cursor_row = LCDROWMAX - 1; // ensure space is available for the character
   lcd_buffer[cursor_row][cursor_col] = 0x00;
   for(j=0; j<4; j++) {
      lcd_buffer[cursor_row][cursor_col + j] =  pgm_read_byte(&(miniFont [(ch-32)*4 + j] ));
       }

   lcd_buffer[cursor_row][cursor_col + 4] = 0x00;

   for(j=0; j< 4; j++) {
      if( mode == MENU_NORMAL )
         writeData(lcd_buffer[cursor_row][cursor_col++]);
      else
         writeData(lcd_buffer[cursor_row][cursor_col++] ^ 0xff);
      if (cursor_col >= LCDCOLMAX)
      {
         cursor_col=0;
         cursor_row++;
         if (cursor_row >= LCDROWMAX) cursor_row=0;
      }
   }
Look at
http://de8msh.blogspot.com/
and
http://www.youtube.com/user/de8msharduino

Joghurt

#12
Apr 26, 2011, 01:07 pm Last Edit: Apr 26, 2011, 01:10 pm by Joghurt Reason: 1
Naja, den Code

Code: [Select]

for(j=0; j<4; j++) {
lcd_buffer[cursor_row][cursor_col + j] =  pgm_read_byte(&(miniFont [(ch-32)*4 + j] ));
}


könntest Du für die zweite Zeile z.B. so abändern:

Code: [Select]

for(j=0; j<4; j++) {
lcd_buffer[cursor_row][cursor_col + j] |=  pgm_read_byte(&(miniFont [(ch-32)*4 + j] )) << 6;
lcd_buffer[cursor_row +1][cursor_col + j] |=  pgm_read_byte(&(miniFont [(ch-32)*4 + j] )) >> 2;
       }

(Bei der Richtung der ">>" bin ich mir jetzt nicht sicher.)

Das "|=" ist wichtig, weil Du sonst mit der nächsten Zeile die aktuelle überschreibst.
Da musst Du dann allerdings ganz zu Anfang einen "Reinigungslauf" machen, also alles auf "0x00" setzen.

So oder so ähnlich... ;)

Joghurt

Und wenn Du das maximale an Buichstaben bei der Anzeige rausholen willst könntest Du den Font "proportional" anlegen, indem Du die Breiten von Zeichen wie "i", "l", "1", "." oder "!" berücksichtigst und nicht immer fest 3 Pixeln annimmst.
Das sieht dann auch in der Ausgabe besser aus, kostet aber etwas Aufwand. ;)

DE8MSH

So ähnlich  :D, denn:


C:\Program Files\Arduino\libraries\nokia_3310_lcd\nokia_3310_lcd.cpp: In member function 'void Nokia_3310_lcd::writeMiniChar(unsigned char, char)':
C:\Program Files\Arduino\libraries\nokia_3310_lcd\nokia_3310_lcd.cpp:434: error: invalid operands of types 'const unsigned char*' and 'int' to binary 'operator>>'
Look at
http://de8msh.blogspot.com/
and
http://www.youtube.com/user/de8msharduino

Go Up