Pages: [1]   Go Down
Author Topic: ARDUINO > 16x2 LCD und SD Card - Pins mehrfach?  (Read 3911 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ich mache schon länger mit dem Ardo rum. Aber eines habe ich bis heute nicht verstanden: kann ich unterschiedliche Hardware mit (teilweiser) gleicher PIN Belegung nutzen? Beispiel: ich möchte mein 16x2 LCD anschließen. Das hat u.A. PIN 10 und 11. Eine SD Card PIN Belegung, die so aussieht http://obduino.ca/SD_logger_arduino.jpg, nutzt auch 10 und 11.

Bekomme ich das zum Laufen? Ich muss ja das LCD UND die SD Card ansteuern. Oder anders: MUSS man die Pinbelegung einhalten? Ich könnte ja die Sd2PinMap.h von SDfat

Code:
#else  // defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// 168 and 328 Arduinos

// Two Wire (aka I2C) ports
uint8_t const SDA_PIN = 18;
uint8_t const SCL_PIN = 19;

// SPI port
uint8_t const SS_PIN = 10;
uint8_t const MOSI_PIN = 11;
uint8_t const MISO_PIN = 12;
uint8_t const SCK_PIN = 13;

static const pin_map_t digitalPinMap[] = {
  {&DDRD, &PIND, &PORTD, 0},  // D0  0
  {&DDRD, &PIND, &PORTD, 1},  // D1  1
  {&DDRD, &PIND, &PORTD, 2},  // D2  2
  {&DDRD, &PIND, &PORTD, 3},  // D3  3
  {&DDRD, &PIND, &PORTD, 4},  // D4  4
  {&DDRD, &PIND, &PORTD, 5},  // D5  5
  {&DDRD, &PIND, &PORTD, 6},  // D6  6
  {&DDRD, &PIND, &PORTD, 7},  // D7  7
  {&DDRB, &PINB, &PORTB, 0},  // B0  8
  {&DDRB, &PINB, &PORTB, 1},  // B1  9
  {&DDRB, &PINB, &PORTB, 2},  // B2 10
  {&DDRB, &PINB, &PORTB, 3},  // B3 11
  {&DDRB, &PINB, &PORTB, 4},  // B4 12
  {&DDRB, &PINB, &PORTB, 5},  // B5 13
  {&DDRC, &PINC, &PORTC, 0},  // C0 14
  {&DDRC, &PINC, &PORTC, 1},  // C1 15
  {&DDRC, &PINC, &PORTC, 2},  // C2 16
  {&DDRC, &PINC, &PORTC, 3},  // C3 17
  {&DDRC, &PINC, &PORTC, 4},  // C4 18
  {&DDRC, &PINC, &PORTC, 5}   // C5 19
};
#endif  // defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)

dahingehend ändern, dass sie andere PINS benutzt. Oder MUSS das genau an die Pins?

Hintergrund: ich möchte mir einen Templogger mit Theristor bauen. Würde auch ohne Display gehen - mit ist aber schöner smiley
« Last Edit: January 18, 2011, 06:18:25 am by DE8MSH » Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 23
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

An der Möglichkeit ohne SD-Shield Daten zu loggen, bin ich sehr interessiert. Verstehe ich das richtig, dass an pin 4 3,3 Volt angelegt werden müssen?

Gruß

Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21488
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du mußt nicht die Pins beibehalten; Du kannst sie auch (falls andere mit den gleichen Funktionen zur Verfügung stehen) durch andere erseten.
Bei der Liquid Cristal Library gibst Du ja di Pins in der Definition an. Die möglichkeiten sind:
LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
http://arduino.cc/en/Reference/LiquidCrystalConstructor

Pins kannst Du definitiv nicht doppeltbelegen.

Grüße Uwe
Logged

0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@hanspeter99: ja, Du kannst ohne Shield loggen. Einfach SD Card an Arduino ranbauen und die SDFAT Library einbinden. Dort sind genug Examples dabei was man machen kann (read, write etc.). Da die SD Card mit 3,3v betrieben werden sollte, sollte man das auch tun. Sonst kann sie wohl kaputt gehen  :-? Ich habe mal eine GPL auf die Art ausgelesen:



@uwefed; ich werde mal probieren ob ich beides zum Laufen bekomme. Mein LCD benötigt auf jedenfall ditte hier:

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Oder anders gesagt: damit habe ich das bisher betrieben. D.h. also, das sich nicht unbedingt auf MOSI, MISO usw. angewiesen bin?!
« Last Edit: January 18, 2011, 07:03:08 am by DE8MSH » Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21488
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nein, nicht auf mosi ...
Du kannst die Pins ändern wie Du willst. (in SW und HW gleichzeitig  smiley-wink  )
Grüße Uwe
« Last Edit: January 18, 2011, 07:23:33 am by uwefed » Logged

0
Offline Offline
Jr. Member
**
Karma: 3
Posts: 71
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Uwe,

ich habe mal mein "Hallo Welt" Beispiel modifiziert.
Vorher hatte ich, wie im "Hello, world" neben den 4 Datenbits nur RS und EN auf Pin12 bzw Pin11 liegen, RW fest auf GND.

Nun habe ich die Leitung RW auf Pin11 hinzugenommen, EN auf Pin10 verschoben,
im "Hallo Welt" nun die Anweisung LiquidCrystal lcd entsprechend geändert (12, 11, 10, 5, 4, 3, 2)...
und es funktioniert!
Daraus schließe ich, dass die Auswahl der Initialisierung in "LiquidCrystal lcd()" über die Anzahl der Parameter erfolgt, stimmt das?
Hier folgen ja 7 Parameter statt der bisherigen 6....

Gruß
Manfred
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21488
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bei der Liquid Cristal Library gibst Du ja di Pins in der Definition an. Die möglichkeiten sind:
LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
http://arduino.cc/en/Reference/LiquidCrystalConstructor

die Möglichkeiten sind:
* 4 oder 8 Datenbit
* 2 oder 3 Steuerbits (Enable, Read/Write und Selects Registers.
RW (Read/Write) kann auch nicht verwendet werden und fix auf Write gestellt werden. So kann das Busy Bit nicht kontrolliert werden und es muß lange genug gewartet werden; zB die Initialitation braucht einige mSec.
Enable sagt wann die Daten auf den Datenleitungen gültig sind.
RS Selects Registers. Zeigt ob die werte auf den Datenleitungen Daten oder Befehle sind.

Zusammenfassen das Interface funktioniert mit 6, 7, 10 oder 11 Bits.    

Grüße Uwe
« Last Edit: January 18, 2011, 03:09:00 pm by uwefed » Logged

0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Leute,

das was Uwe sagt ist richtig ;D Ich habe alles nach PIN 13 bis PIN 8 verschoben. Und.....es rennt smiley Danke Uwe. Stand meines Miniprojekts ist deshalb



Jetzt muss ich noch die SD card ranbauen und fini. In der Demo liogge ich alle 10 Sekunden mit (second % 10)==0. Soll noch auf alle 10 Minuten hoch. Die Temperatur habe ich nocht nicht mit einem R calibriert.
Egal. Prinzipiell rennt es.  smiley
« Last Edit: January 18, 2011, 04:44:36 pm by DE8MSH » Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21488
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich versuch ja ständig nicht das falsche zu sagen.  smiley-wink
Danke.
Für das Zeitintervall versuchs mal mit metro Biblithek.
http://www.arduino.cc/playground/Code/Metro

Grüße Uwe
Logged

0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Uwe,

danke für die Info. Im Moment gehe ich aber davon aus, dass ich nur (minute % 10)==0 benötige um alle 10 Minuten einen Wert zu nehmen. Oder soetwas wie if ((minute % 10)==0 && second==0).
« Last Edit: January 19, 2011, 01:19:08 am by DE8MSH » Logged


0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo nochmal.

ich betreibe ja LCD, SD Card und RTC am Arduino Uno. Leider schaltet sich das Diplay aus oder garnicht erst an sobald ich if (!card.init(SPI_HALF_SPEED)) error("card.init failed"); gebe. Das scheint sich irgendetwas zu beharken...

Das sind die LIBS, die ich einband:

#include <Wire.h>
#include <LiquidCrystal.h>
#include <SdFat.h>
#include <SdFatUtil.h>


Sobald ich den Eintrag  if (!card.init(SPI_HALF_SPEED)) error("card.init failed"); (und ff) herausne
hme zeigt das Display wieder an  :-?

Ich habe in LiquidCrystal.h gesehen. Ich wüsste jetzt nicht wo sich LiquidCrystal.h und SdFat.h &&|| SdFatUtil.h harken....

Anbei meine Verkabelung:

http://img31.imageshack.us/i/sdrtc.jpg/

Und der Code:

http://pastie.org/1476668
« Last Edit: January 19, 2011, 04:55:14 am by DE8MSH » Logged


0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Vergesst, was ich oben schrieb. Ich sollte mir den Code auch mal ansehen. Wenn ich serial Monitor aufmache steht dort

error: card.init failed
SD error: 1,FF


In der Errorbehandlung gibt es ein while(1);:

// store error strings in flash to save RAM
#define error(s) error_P(PSTR(s))

void error_P(const char* str) {
  PgmPrint("error: ");
  SerialPrintln_P(str);
  if (card.errorCode()) {
    PgmPrint("SD error: ");
    Serial.print(card.errorCode(), HEX);
    Serial.print(',');
    Serial.println(card.errorData(), HEX);
  }
  while(1);
}

Somit kann das LCD ja nichts anzeigen, da es auf der loop nicht hinauskommt... Sorry Leute für den "Spam". Ich muss nun prüfen warum die SD card nicht initialisiert werden kann.

l8er
« Last Edit: January 19, 2011, 06:44:29 am by DE8MSH » Logged


0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tja,

es ist wie immer. Macht man es richtig funktioniert es. Log auf SD klappt nun. Mit RTC und mit LCD.

Code:
110119;145900;Tempwert
110119;150000;Tempwert
110119;150100;Tempwert
110119;150200;Tempwert
110119;150300;Tempwert
110119;150400;Tempwert
110119;150500;Tempwert

Tempwert ist noch Fake, das andere stimmt schon.

Grund war..... war.... öhm.... war.... ein vertauschtes Kabel an der SD Card  smiley-grin
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21488
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sollte Iih dann mit den Ratschlägen so anfangen:
Sind alle Kabel da und richtig angeschlossen???   smiley-wink smiley-wink smiley-wink smiley-wink
Grüße Uwe
Logged

0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

;D Ja Uwe, so wär 's recht smiley

Ich habe meinen ehemaligen Kollegen immer gefragt, wenn sein C++ Code nicht lief, "haste ein Semikolon vergessen"?  smiley-razz

Kann ja mal passieren, näch   :smiley Aber so lernt man seinen Code und die Hardware auch mal kennen  smiley-grin
« Last Edit: January 19, 2011, 02:42:07 pm by DE8MSH » Logged


Pages: [1]   Go Up
Jump to: