0
Offline
Sr. Member
Karma: 4
Posts: 341
A SWL life as a coder... I'll try.
|
 |
« on: January 18, 2011, 06:15:14 am » |
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 #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 
|
|
|
|
« Last Edit: January 18, 2011, 06:18:25 am by DE8MSH »
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 23
Arduino rocks
|
 |
« Reply #1 on: January 18, 2011, 06:42:56 am » |
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
Brattain Member
Karma: 160
Posts: 15641
+39 349 2158303
|
 |
« Reply #2 on: January 18, 2011, 06:45:57 am » |
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/LiquidCrystalConstructorPins kannst Du definitiv nicht doppeltbelegen. Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Sr. Member
Karma: 4
Posts: 341
A SWL life as a coder... I'll try.
|
 |
« Reply #3 on: January 18, 2011, 07:00:51 am » |
@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
Brattain Member
Karma: 160
Posts: 15641
+39 349 2158303
|
 |
« Reply #4 on: January 18, 2011, 07:22:57 am » |
Nein, nicht auf mosi ... Du kannst die Pins ändern wie Du willst. (in SW und HW gleichzeitig  ) Grüße Uwe
|
|
|
|
« Last Edit: January 18, 2011, 07:23:33 am by uwefed »
|
Logged
|
|
|
|
|
0
Offline
Jr. Member
Karma: 3
Posts: 64
Arduino rocks
|
 |
« Reply #5 on: January 18, 2011, 01:51:21 pm » |
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
Brattain Member
Karma: 160
Posts: 15641
+39 349 2158303
|
 |
« Reply #6 on: January 18, 2011, 03:07:58 pm » |
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/LiquidCrystalConstructordie 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
Sr. Member
Karma: 4
Posts: 341
A SWL life as a coder... I'll try.
|
 |
« Reply #7 on: January 18, 2011, 04:44:07 pm » |
Hi Leute, das was Uwe sagt ist richtig ;D Ich habe alles nach PIN 13 bis PIN 8 verschoben. Und.....es rennt  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. 
|
|
|
|
« Last Edit: January 18, 2011, 04:44:36 pm by DE8MSH »
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 160
Posts: 15641
+39 349 2158303
|
 |
« Reply #8 on: January 18, 2011, 07:50:21 pm » |
Ich versuch ja ständig nicht das falsche zu sagen.  Danke. Für das Zeitintervall versuchs mal mit metro Biblithek. http://www.arduino.cc/playground/Code/MetroGrüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Sr. Member
Karma: 4
Posts: 341
A SWL life as a coder... I'll try.
|
 |
« Reply #9 on: January 19, 2011, 01:18:45 am » |
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
Sr. Member
Karma: 4
Posts: 341
A SWL life as a coder... I'll try.
|
 |
« Reply #10 on: January 19, 2011, 03:29:20 am » |
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
Sr. Member
Karma: 4
Posts: 341
A SWL life as a coder... I'll try.
|
 |
« Reply #11 on: January 19, 2011, 06:43:47 am » |
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
Sr. Member
Karma: 4
Posts: 341
A SWL life as a coder... I'll try.
|
 |
« Reply #12 on: January 19, 2011, 09:08:53 am » |
Tja, es ist wie immer. Macht man es richtig funktioniert es. Log auf SD klappt nun. Mit RTC und mit LCD. 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 
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 160
Posts: 15641
+39 349 2158303
|
 |
« Reply #13 on: January 19, 2011, 11:21:12 am » |
Sollte Iih dann mit den Ratschlägen so anfangen: Sind alle Kabel da und richtig angeschlossen???  Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Sr. Member
Karma: 4
Posts: 341
A SWL life as a coder... I'll try.
|
 |
« Reply #14 on: January 19, 2011, 02:41:21 pm » |
;D Ja Uwe, so wär 's recht  Ich habe meinen ehemaligen Kollegen immer gefragt, wenn sein C++ Code nicht lief, "haste ein Semikolon vergessen"?  Kann ja mal passieren, näch :  Aber so lernt man seinen Code und die Hardware auch mal kennen 
|
|
|
|
« Last Edit: January 19, 2011, 02:42:07 pm by DE8MSH »
|
Logged
|
|
|
|
|
|