mikrocontroller.net

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


Autor: Maxwell (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Magnus M. (magnetus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define SCK  ( 1 << 2 )

Autor: Maxwell (Gast)
Datum:

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

Danke Dir!

Autor: Magnus M. (magnetus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bit #2

Autor: Maxwell (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Maxwell (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Maxwell (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Maxwell (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Maxwell (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Verwirrter Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.