Forum: Digitale Signalverarbeitung / DSP / Machine Learning Digitale Eingänge


von Johannes (Gast)


Lesenswert?

Hallo zusammen,

ich bin gerade dabei die Möglichkeiten der Digitalen Eingänge an dem
Evaluation Board von Spectrum Digital mit dem dem TI-Prozessor
TMS320F2812 zu erforschen. Leider kann ich kaum Dokumentationsmaterial
finden. Auch nicht auf der "übersichtlichen" TI-Homepage.
Kann mir da jemand weiterhelfen?

Danke Euch...

von Michael (Gast)


Lesenswert?

Hallo Johannes,

ich bin auch nicht wirklich glücklich geworden mit der TI homepage.
Aber schau Dir doch mal das Beispiel "gpio_toggle" an. Damit kann man
etwas anfangen. Du musst Dir nur das Projekt File "gpio_toggle.ptj"
laden. Und Load Programm ausführen und anschließend auf Run drücken.
Dann sollten ein paar ports getoggelt werden.

Michael

von Johannes (Gast)


Lesenswert?

Hallo Danke für den Hinweis. Leider kann ich das Beispiel nicht finden.
Ist das auf der CD auf der TI-Homepage oder wo finde ich das?

Danke schonmal,

Johannes

von Michael (Gast)


Lesenswert?

Hallo Johannes,

es sollte eigentlich auf einer der mitgelieferten CD's drauf sein.
Bzw. wenn Du CCS komplett installiert hast, dann sollte irgendow ein
Ordner tidcs sein:

C:\tidcs\c28\dsp281x\v100\DSP281x_examples\gpio_toggle

Dort solltes Du was finden...

Ich glaube der Pfad ist auch vollständig auf einer CD drauf:

D:\tidcs\c28\dsp281x\v100\DSP281x_examples\gpio_toggle


Ich hoffe Du kommst weiter, wenn nicht dann schreib nochmal....

Michael

von Johannes (Gast)


Lesenswert?

Ja Danke, habs quasi gerade eben parallel mit Deiner Antwort gefunden.
Kannst Du mir noch sagen, wo man noch ein paar kleine Erklärungen
(Außer den Kommentaren im Quellcode) finden kann?

Wie zum Beispiel kann man sich das Example 1 erklären:


   while(1)
   {
       GpioDataRegs.GPADAT.all    =0xAAAA;
       GpioDataRegs.GPBDAT.all    =0xAAAA;
       GpioDataRegs.GPDDAT.all    =0x0022;
       GpioDataRegs.GPEDAT.all    =0x0002;
       GpioDataRegs.GPFDAT.all    =0xAAAA;
       GpioDataRegs.GPGDAT.all    =0x0020;
       delay_loop();

       GpioDataRegs.GPADAT.all    =0x5555;
       GpioDataRegs.GPBDAT.all    =0x5555;
       GpioDataRegs.GPDDAT.all    =0x0041;    // Four I/Os only
       GpioDataRegs.GPEDAT.all    =0x0005;    // ThreeI/Os only
       GpioDataRegs.GPFDAT.all    =0x5555;
       GpioDataRegs.GPGDAT.all    =0x0010;    // Two  I/Os only
       delay_loop();
    }

Danke für Hilfe,

Johannes

von Michael (Gast)


Lesenswert?

Mit einer Erklärung finden wird schwer....

Das ganze beruht auf einer Header Library. Diese beinhaltet Strukturen
und Unions.Mit diesen kann dann ganz elegant über Zeiger auf alle Ports
bziehungsweise auf einzelne Bits zugriffen werden.

Übrigens das ist die schnellste Zugriffsweise überhaupt.

Michael

von Johannes (Gast)


Lesenswert?

Ja, das dachte ich mir schon, aber von welchem Datentyp sind die
einzelnen Variablen in diesen Strukturen bzw. Unions?
Und vor allem: was soll passieren, wenn ich so

pioDataRegs.GPADAT.all    =0xAAAA;

zuweise? Was bedeutet der Wert 0xAAAA? Dachte Digitale Eingänge kann
man nur auf 1 oder 0 setzen....

???

von Michael (Gast)


Lesenswert?

T'schuldige Johannes für die Frage.
Hast Du schon mal uC programmiert?

Aber ich erkläre es natürlich gern:

GpioDataRegs.GPADAT.all

GpioDataRegs ist eine Struktur die alle General Purpose I/O's
verwaltet. Innerhalb davon findest Du wieder eine Struktur die dann die
Pins des Ports A (GP A DAT) beinhaltet.
all bedeutet das Du nun alle 16 Pins des Ports auf einmal ansprichst.

Du kannst auch schreiben:
GpioDataRegs.GPADAT.bit.GPIOA0 = 1;
Damit tust Du in der Tat nur den Pin 0 des Ports A auf eins setzen...

Ich hoffe damit kommst Du weiter,
Michael

PS: Schau Dir doch mal das File DSP281x_Gpio.h dazu an.

von Johannes (Gast)


Lesenswert?

Hallo

Danke erstmal für die Antwort. Ich habe zwar schonmal µC programmiert,
ist aber schon lange her.

Leider hast Du mich falsch verstanden. Die Sache mit der Struktur ist
mir klar. und das mit ".all" Alle 16 Pins angesprochen werden, auch.
Meine Frage zielte eher auf die Zuweisung.

Ich würde verstehen, wenn ich (angenommen ich wollte alle 16 Pins auf
eins setzen) folgendes implementiere:

GpioDataRegs.GPADAT.all = 1;

In diesem Bsp wird aber nicht 1 sondern die Hex-Zahl 0xAAAA
zugewiesen.
Aus welchem Grund?


Eine zweite Frage wäre:

Ich habe nun eine Dokumentation von TI gefunden, die etwas über
GP-IO's erklärt: spru078c.pdf

Leider fehlt mir noch eine "Art" Schnittstelle:

Ich kann sowas wie einen Port A, B, ... (bzw. einzelne Pins auf 1 oder
0 setzen)
Auf meinem Board (TMS320F2812 Board von Spectrum Digital) werden die
digitalen Ein-Ausgabe-Ports aber mit Port4, Port7 und Port8 angegeben.

Wie müßte eine Programmzeile aussehen, wenn ich z.B. Pin 4 von Port8
auf 1 setzen möchte?

@Michael: Puh, gar nicht so einfach zu erklären, was man nicht
versteht. Aber ich hoffe, ich konnte es deutlich machen. Würde mich ein
weiteres Mal sehr freuen, wenn Du mir nochmal schnell helfen könntest :)

von Michael (Gast)


Lesenswert?

Oh Alter ich dachte Du hast das mit den Strukturen verstanden....

Also Crashcourse:

struct GPAMUX_BITS  {        // bits   description
   Uint16 PWM1_GPIOA0:1;     // 0  Belegt ein Bit im Speicher/Register
   Uint16 PWM2_GPIOA1:1;     // 1  Belegt ein Bit im Speicher/Register
   Uint16 PWM3_GPIOA2:1;     // 2  Belegt ein Bit im Speicher/Register
   Uint16 PWM4_GPIOA3:1;     // 3
   Uint16 PWM5_GPIOA4:1;     // 4
   Uint16 PWM6_GPIOA5:1;     // 5
   Uint16 T1PWM_GPIOA6:1;    // 6
   Uint16 T2PWM_GPIOA7:1;    // 7
   Uint16 CAP1Q1_GPIOA8:1;   // 8
   Uint16 CAP2Q2_GPIOA9:1;   // 9
   Uint16 CAP3QI1_GPIOA10:1; // 10
   Uint16 TDIRA_GPIOA11:1;   // 11
   Uint16 TCLKINA_GPIOA12:1; // 12
   Uint16 C1TRIP_GPIOA13:1;  // 13
   Uint16 C2TRIP_GPIOA14:1;  // 14
   Uint16 C3TRIP_GPIOA15:1;  // 15

};

union GPAMUX_REG {
   Uint16             all;
   struct GPAMUX_BITS bit;
};


Jetzt kannst Du über diese union auf die Register folgendemaßen
zugreifen:
1.) GPAMUX_REG.all = 0xAAAA; // Da "all" eine Uint16 Variable ist.
2.) GPAMUX_REG.GPAMUX_BITS.PWM1_GPIOA0 = 1; // Da es ein Bit im
Register/Speicher anspricht.

Konkret zu Deiner Frage ( solltest Du jetzt selber lösen können), aber
sicherheitshalber:

GpioDataRegs.GPBDAT.bit.GPIOB4 = 1; // Pin4 von PortB

Ach jetzt verstehe ich Dein Problem ;-)....Ahhhh....
Port8 ja welcher Port vom F2812. Da mußt Du in die TechRef_A_ schauen
und Dir das raussuchen....Wie genau das Dokument heißt muss ich morgen
mal gucken. Hab' ich gerade nicht zur Hand.

Michael

von Johannes (Gast)


Lesenswert?

Ja, genau. DAS ist mein Problem.

Meinst Du die Datei: 2812_ezdsp_TechRef_B.pdf?
(Ich habe Revision B)

Da konnte ich nichts finden, hab die schon den ganzen Tag vor mir.

Aber wenn Du mir dieses Problem noch erklären oder lösen könntest, bin
ich ein großes Stück weiter....

Danke, Danke, Danke!!!

von Johannes (Gast)


Lesenswert?

Ja jetzt ja, habs jetzt hin bekommen!

Wenn man beide Dateien

2812_ezdsp_Schem_B.pdf und 2812_ezdsp_TechRef_B.pdf

anschaut, dann wird es klar :)

Habe jetzt - bis auf Weiteres - keine Fragen mehr!

Danke nochmal für die großartige Unterstützung :)

von Michael (Gast)


Lesenswert?

Freut mich das Du weitergekommen bist. Nur noch so, mit dem Appnote
2812_ezdsp_Schem_A.pdf
findest Du die Pinbelegungen am leichtesten....

Michael

von Johannes (Gast)


Lesenswert?

- Bis auf Weiteres - hatte ich in meinem letzten Beitrag geschrieben :)

Hat schonmal jemand versucht, das Beispiel gpio_toggle in ein
bestehendes Projekt zu integrieren? Bei mir klappt das eigentlich nicht
:(

aktuelle Fehlermeldung:

>>   error: symbol referencing errors - './Debug/volume.out' not
built

darüber werden bestimmt 50 Symbole angezeigt, die nicht erkannt
wurden.

Kann mir da jemand weiterhelfen, oder ist es nicht empfehlenswert,
dieses Bsp-Programm in ein bestehendes Projekt zu integrieren?

Grüße, Johannes

von Michael (Gast)


Lesenswert?

Also ich weiß nicht was Du mit dem Beispiel in einem bestehenden Projekt
willst. Das Beispiel ist doch sehr primitiv.

Besser fände ich die Frage, kann mann aus dem Beispiel ein neues
Projekt erzeugen?
Man könnte das ganze Gerümpel rausschmeisen und man hat ein schönes
"leeres" Projekt mit dem man sofort loslegen kann.

Michael

>>- Bis auf Weiteres - hatte ich in meinem letzten Beitrag geschrieben
>>:)

War doch noch ein guter Tip mit dem 2812_ezdsp_Schem_A.pdf. Ich hoffe
Du hast in noch "rechtzeitig" gelesen....

von Johannes (Gast)


Lesenswert?

Naja, ok dann will ich es mal anders formulieren:

Ich habe ein Projekt, da läuft schon ziemlich viel...
und in dieses Projekt möchte ich nun auch noch die Möglichkeit einfügen
über die digitale I/O-Schnittstelle Daten "rein" bzw. "raus" zu
befördern (einlesen / auslesen).

Das war eigentlich alles. Ich habe eben vresucht Teile aus dem Beispiel
zu übernehmen. Aber das geht so nicht. Hier stehe ich und komme nicht
weiter.

Gruß, Johannes

von Michael (Gast)


Lesenswert?

....

Du mußt doch nur zwei Register einstellen.

GPxMUX & GPxDIR

und anschließend kannst Du das Register

GPIOx

ganz normal verwenden...

Michael

von Marcus (Gast)


Lesenswert?

Hallo
ich gerade das probleme mit dem einlesen und auslesen der Daten. ich
habe das Programm bis da wo ihr seid geschrieben und jetzt weiss ich
nicht wie ich den code zum einlesen bzw. auslesen der Daten weiter
schreiben soll. Könntet ihr mir vielleicht helfen ? das wäre sehr
nett.
Gruß,

Marcus

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.