Forum: Mikrocontroller und Digitale Elektronik [Arduino] Pins "hardwaremässig" ansprechen (PORTXY)


von Maxwell (Gast)


Lesenswert?

Hallo zusammen,

habe folgenden Treiber für einen EEPROM, den ich gerne auf meinen 
arduino laufen lassen würde.
http://www.sst.com/dotAsset/40542.txt
Das Problem ist, ich muss noch die Konstanten "CE", "SCK" usw. 
definieren, weiss aber nicht, wie ich das in der Arduino IDE machen 
kann. Normalerweise würde ich das mit

#define SCK  ( 1 << PORTE2 )

tun. Aber die IDE erkennt das nicht. Wie kann ich das direkt mit C tun?

Danke euch,

Max

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

#define SCK  ( 1 << 2 )

von Maxwell (Gast)


Lesenswert?

oh super danke für die Antwort. Aber was ist der 2er? Also welcher Pin 
ist das jetzt?

Danke Dir!

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Bit #2

von Maxwell (Gast)


Lesenswert?

hm tut mir Leid, aber das verstehe ich jetzt nicht. Bit #2? Von welchen? 
Ich brauche doch einen Port? Und einen Pin von dem Port?

von holger (Gast)


Lesenswert?

>Aber was ist der 2er? Also welcher Pin
>ist das jetzt?

Was willst ausgerechnet DU mit so einem Monsterflash?

>Das Problem ist, ich muss noch die Konstanten "CE", "SCK" usw.
>definieren, weiss aber nicht, wie ich das in der Arduino IDE machen
>kann.

Das kannst du so nicht übernehmen.

SCK = 1 oder CE = 0 musst du durch entsprechende Bitsetz-
und Bitlöschbefehle ersetzen.

von Maxwell (Gast)


Lesenswert?

Das ist ein EEPROM in einem GPS-Logger der wegen anderen Problemen die 
Daten nicht mehr ausgibt. Da die Daten aber wichtig sind, möchte ich 
diesen EEPROM nun an meinen arduino anschliessen und den speicher 
auslesen um die daten zu retten.

Dass ich die Befehle erstezen muss, dachte ich mir fast. Aber wie mache 
ich das? Kann ich da jetzt einfach dann digitalwrite verwenden?

von holger (Gast)


Lesenswert?

>Das ist ein EEPROM in einem GPS-Logger der wegen anderen Problemen die
>Daten nicht mehr ausgibt. Da die Daten aber wichtig sind, möchte ich
>diesen EEPROM nun an meinen arduino anschliessen und den speicher
>auslesen um die daten zu retten.

Prust;) Du weisst ja nicht mal wie man einen Portpin setzt oder
löscht. Lass da mal einen Profi ran. Sonst sind deine Daten
möglicherweise futsch.

von Maxwell (Gast)


Lesenswert?

ich kann nicht ganz nachvollziehen warum du so polemisch wirst.
Ich habe einen fertigen Treiber, den ich in C sehr wohl verstehe, den 
ich aber, weil ich den Arduino bzw. seine ganzen besonderheiten erst 
seit wenigen Tagen kenne / besitze. Einem Profi das zu geben ist 
Schwachsinn, die Daten sind keine paar tausend Euro wert. Und noch 
futscher als sie jetzt schon sind können sie nicht werden. Also wenn Du 
keine lust hast mir zu helfen dann schau einfach nicht in den Thread. 
Ich werds auch so rausfinden, ich geb dir dann Bescheid wenns 
funktioniert hat...

von Karl H. (kbuchegg)


Lesenswert?

Maxwell schrieb:
> ich kann nicht ganz nachvollziehen warum du so polemisch wirst.
> Ich habe einen fertigen Treiber, den ich in C sehr wohl verstehe, den
> ich aber, weil ich den Arduino bzw. seine ganzen besonderheiten erst
> seit wenigen Tagen kenne / besitze. Einem Profi das zu geben ist
> Schwachsinn, die Daten sind keine paar tausend Euro wert. Und noch
> futscher als sie jetzt schon sind können sie nicht werden. Also wenn Du
> keine lust hast mir zu helfen dann schau einfach nicht in den Thread.
> Ich werds auch so rausfinden, ich geb dir dann Bescheid wenns
> funktioniert hat...

Gut.
Dann fang erst mal damit an, fstzulegen an welchen Pin an welchem Port 
du die EEPROM Leitungen SCK, SI, SO, SO, CE, WP, Hold anschliessen 
willst.

Und dann programmierst du ein 'Bit auf 1 an diesem Port setzen' wann 
immer im Code ein
   SCK = 1
auftaucht, indem du das von dir bei der Hardwarezuordnung gewählte Bit 
am von dir gewählten Port auf 1 setzt.
Für SCK = 0 dann die genaue Umkehrung bzw. selbiges in Grün für alle 
anderen Signale.

Ist doch nicht so schwer. Da hätte man auch alleine draufkommen können. 
Und das ist dann genau das, was die Profis auszeichnet. Die kommen ganz 
von alleine auf derart naheliegenden Ideen bzw. haben auch kein Problem
    temp = SO;
in Standard-C über eine Standard-Bitabfrage zu formulieren.

Die richtigen Profis schaffen das ganze dann auch, ohne den Code 
umschreiben zu müssen, indem sie sich mittels Bitfeldern eine Zuordnung 
bauen. Aber das ist dann schon ein wenig trickreich, wenn man es noch 
nie gemacht hat.

von holger (Gast)


Lesenswert?

>ich kann nicht ganz nachvollziehen warum du so polemisch wirst.

Siehe unten.

>Ich habe einen fertigen Treiber, den ich in C sehr wohl verstehe, den
>ich aber, weil ich den Arduino bzw. seine ganzen besonderheiten erst
>seit wenigen Tagen kenne / besitze.

Dann ist das auslesen eines solchen Chips natürlich das erste
Programm;) Lass erst mal ne LED leuchten. Dann lass sie blinken.

Selbst wenn du den Chip lesen kannst, wie kommen dann die Daten
auf den PC? Da gibt es noch ein paar Hürden die du nehmen musst.

von Maxwell (Gast)


Lesenswert?

Danke für deine konstruktive Hilfe. Soweit war ich schon, nur ich weiss 
jetzt eben nicht wie ich mit dem Arduino auf einen Port zugreife. Mit 
einem andren board (das ich aber nicht mehr habe) habe ich eben immer 
ganz normal mit

DDRA |= (1<<6);

auf einen bestimmten Pin zugegriffen. Mit dem Arduino kenne ich aber nur 
das digitalwrite...

von Maxwell (Gast)


Lesenswert?

LEDs blinken lassen kann ich, ich bin doch nicht blöd... Ausserdem habe 
ich schon in eingen projekten eine serielle schnittstelle verwendet, 
alles kein problem. Ich hab nur keine Ahnung wie ich auf einen 
bestimmten port zugreifen kann...

von Karl H. (kbuchegg)


Lesenswert?

Maxwell schrieb:

> auf einen bestimmten Pin zugegriffen. Mit dem Arduino kenne ich aber nur
> das digitalwrite...


Man kann einen Arduino auch in ganz normalem C programmieren. Die 
Arduino eigene Programmiersprache ist zwar nett, aber kein Muss.

Aber abgesehen davon:
was hindert dich daran, den Code umzuschreiben, so dass anstelle von

   SCK = 1;

dann dortsteht

   digitalwrite( SCK_Pin, HIGH );


und für den SCK_Pin suchst du dir einen der Anschlüsse aus, lässt den 
Draht vom SCK Pin des EEPROM dort hingehen und teilst das dem 
Arduino-"C" auf die Arduino-übliche Art und Weise mit.

von Verwirrter Anfänger (Gast)


Lesenswert?

Wenn du die avr io.h einbindest, geht das beim Arduino genauso wie bei 
jedem anderen Atmega auch, letztendlich ist das ja auch nur ein avr 
Entwicklungsboard.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.