Hallo.
Wie verbindet man STM32 über I2C und HAL mit AD7746?
Ich schicke ein Signal an AD7746 und erwarte eine Antwort (s.Datenblatt
S.12). Wenn sie vorhanden ist, blinke ich mit der
Diode(STM32F303RE-Nucleo). I2C3 ist initialisiert. Die Interrupts sind
eingeschaltet. Unten ist der Code, der einen Fehler ausgibt.
Code:
1
uint8_taTxBuffer[]=" ****I2C_TwoBoards communication based on IT**** ****I2C_TwoBoards communication based on IT**** ****I2C_TwoBoards communication based on IT**** ";
Michael R. schrieb:> Ich schicke ein "Hallo" an AD7746 und erwarte eine Antwort
Das ist ein A/D Wandler, kein Mensch. Erwartest du wirklich, dass er auf
diesen Text reagiert und irgend etwas Menschen-lesbares antwortet?
Ich würde Dir empfehlen, zuerst die Programmiersprache C auf einem PC zu
lernen, bevor du die HAL benutzt. Dazu empfehle ich Dir die QT Creator
IDE weil da alles drin ist, was du brauchst. Damit erstellst du Projekte
vom Typ "Projekt ohne Qt", "Reine C-Anwendung". Besorge Dir ein
Einsteiger-Buch für C oder nimm das:
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/
Stefan F. schrieb:> Das ist ein A/D Wandler, kein Mensch.
Umgangssprachlich. Ich würde sonst schreiben nach dem Motto: ...einen
Text "Hallo". Lass dich dadurch nicht irritieren.
Stefan F. schrieb:> Ich würde Dir empfehlen,...
Dafür danke. Mit C komme ich klar, Perepherie-Programmierung gelingt mir
schwieriger.
Stefan F. schrieb:> Falls du da eine Funktion...
Danke für deine Antwort. Ich bekomme dann diese Fehler:
1
..\Src\main.c:97:28: error: expected declaration specifiers or '...' before '&' token
Michael R. schrieb:> Wie soll ich letztendlich vorgehen, um den Fehler zu beheben?
- Lernen, wie Funktionsaufrufe in C aussehen
- Lernen, wie die I2C-Kommunikation aussieht und welche Befehle dein
AD-Wandler erwartet und verstehen kann und wie er darauf antwortet
Sebastian R. schrieb:> - Lernen, wie Funktionsaufrufe...
Du hast meine Frage nicht verstanden. Ich wollte wissen, wie man mit
HAL-Funktionen mittels interrupt den I2C-Übertragung realisiert. Wie das
Protokoll von I2C funktioniert, weiß ich Bescheid.
Sebastian R. schrieb:> - Lernen, wie die I2C-Kommunikation...
Schon genug gelernt, jetzt bitte ich um außerstehende (menschliche)
Hilfe.
AD7746 erwartet eine Anfrage mit seiner Adresse je nach Bedürftigkeit
schreiben/lesen (S.12 des Datenblattes). Wenn ich aber meinen Code
kompiliere auch in der Form:
Michael R. schrieb:>> Das ist ein A/D Wandler, kein Mensch.> Umgangssprachlich.
Aber dein Quelltext sendet die ersten 32 Zeichen von " ****I2C_TwoBoards
communication based on IT**** ****I2C_TwoBoards communication based on
IT**** ****I2C_TwoBoards communication based on IT**** " and den ADC.
Ist das dein Ernst? Das ist doch noch Sinnloser, als "Hallo"!
Michael R. schrieb:> Mit C komme ich klar
Nein, offenbar nicht. Sonst hättest du nicht gefragt. Deine aktuellen
Probleme sind völlig unabhängig von der HAL. Es geht hier rein um die
Programmiersprache C. Deswegen meine Empfehlung, zuerst C zu lernen.
Sonst hast du zwei offene Baustellen mit zu vielen Unbekannten
gleichzeitig. Mache Dir das leben nicht unnötig schwer!
Dein neues Problem ist offenbar, dass die Funktion
HAL_I2C_Master_Transmit_IT nicht existiert bzw. in einer Header Datei
definiert ist, die du nicht inkludiert hast.
Zeigt deine IDE das nicht bereits unmissverständlich mit einer roten
Schlängel-Linie an?
Noch eine Unstimmigkeit: Es sollte aTxBuffer nicht &aTxBuffer heißen.
Denn die Namen von Arrays zerfallen automatisch zu "Adresse vom Array",
wenn man sie als Parameter beim Funktionsaufruf verwendet.
Das sind wirklich die grundlegendsten C Grundlagen.
&hi2c3 für Adresse von Handle ist richtig.
Wenn fehlende Deklarationen angemeckert werden ist jetzt noch was
anderes kaputt gemacht worden, wie Stefan schon schrieb.
Stefan F. schrieb:> Aber dein Quelltext sendet die ersten 32 Zeichen von...
Hab' aus dem Beispieldatei von ST übernommen. Ich dachte, es auch später
für EEPROM zu benutzen, deswegen so gelassen (zum Testen im EEPROM).
Außerdem dachte ich mir, es wäre zum Test von I2C nicht so wichtig,
oder.
Stefan F. schrieb:> Deswegen meine Empfehlung, zuerst C zu lernen.
Danke. Es scheint, dass du dich um mich Sorgen machst. Es ist sehr
wertvoll in meinen Augen.
Stefan F. schrieb:> Dein neues Problem ist offenbar, dass die Funktion...
Sie existiert. Und inkludiert. Ich habe deinem Rat gefolgt und direkt in
main.h eingeschlossen. Ohne Effekt leider.
Stefan F. schrieb:> Zeigt deine IDE das nicht bereits unmissverständlich mit einer roten> Schlängel-Linie an?
Ja, tut es.((
Stefan F. schrieb:> Das sind wirklich die grundlegendsten C Grundlagen.
Danke für den Link auf das Buch.
Michael R. schrieb:> Schon genug gelernt
wie passt das zu:
Michael R. schrieb:> void HAL_I2C_Master_Transmit_IT(&hi2c3, 0x91, &aTxBuffer, 32)
aTxBuffer ist die Adresse, alternativ wurde ja schon genannt
&aTxBuffer[0]
Johannes S. schrieb:> ist auf jeden Fall auch falsch, entwederTxBuffer> oder&TxBuffer[0]
fast, er hat es aber aTxBuffer[] genannt.
Michael R. schrieb:> Außerdem dachte ich mir, es wäre zum Test von I2C nicht so wichtig
Also hast du doch keine Ahnung von I²C. Aber egal, lerne erst einmal C,
das brauchst du als Grundlage.
Michael R. schrieb:>> Dein neues Problem ist offenbar, dass die Funktion...>> Sie existiert. Und inkludiert. Ich habe deinem Rat gefolgt und direkt in> main.h eingeschlossen. Ohne Effekt leider.
Kann nicht sein. Eine Header Datei, die man einbindet, hat immer einen
Effekt. Vielleicht hast du die falsche Datei eingebunden. Leider reicht
meine Hellseher-Kraft nicht bis zu deinem Bildschirm, und auf noch mehr
Raten habe ich gerade keine Lust.
dann braucht man den ganzen Code um den Fehler zu sehen
Michael R. schrieb:> Fehler:..\Src\main.c:97:40: error: expected ')' before numeric constant> void HAL_I2C_Master_Transmit_IT(hi2c3, 0x91, aTxBuffer, 1);
zumal wir Line 97 nur raten können main.c:97:40:
Klammer falsch sage ich mal :) oder davor ; vergessen!
Johannes S. schrieb:> dann können dem Compiler immer noch die Suchpfade für die includes> fehlen.
Danke. Wo finde ich sie?
Stefan F. schrieb:> Also hast du doch keine Ahnung von I²C. Aber egal, lerne erst einmal C,> das brauchst du als Grundlage.
Du meinst, ich soll den Array auf acht Bits beschränken und den Text
komplett löschen?
Was fehlt mir an dem Verständnis von C? Welche Bereiche würdest du mir
empfehlen?
Stefan F. schrieb:> Leider reicht> meine Hellseher-Kraft nicht...
Aha, so klingt heutzutage die Frage: Welche Dateien hast du angebunden?
Gerne! Ich habe einen Sreenshot für dich gemacht. Wie weiß ich, dass die
Datei angebunden ist?
Michael R. schrieb:> Du meinst, ich soll den Array auf acht Bits beschränken und den Text> komplett löschen?
Du musst das Senden, was der ADC benötigt. Ein Text wird es jedenfalls
nicht sein. Lies das Datenblatt, nachdem du C gelernt hast.
uint8_taTxBuffer[]=" ****I2C_TwoBoards communication based on IT**** ****I2C_TwoBoards communication based on IT**** ****I2C_TwoBoards communication based on IT**** ";
Stefan F. schrieb:> Du musst das Senden, was der ADC benötigt. Ein Text wird es jedenfalls> nicht sein. Lies das Datenblatt, nachdem du C gelernt hast.
Was fehlt mir deiner Meinung nach an C? "Alles" wäre keine Antwort.
Nenne bitte Themen.
> Was fehlt mir an dem Verständnis von C?> Welche Bereiche würdest du mir empfehlen?
Wie man Funktionen deklariert, wie man sie aufruft, und wie man Arrays
verwendet. Vermutlich fehlen Dir noch mehr Sachen.
> Ich habe einen Screenshot für dich gemacht.
Es wäre erheblich effizienter gewesen, das ganze Projekt irgendwo zum
Download bereit zu stellen.
Michael R. schrieb:> HAL_I2C_Master_Transmit_IT(&hi2c3, 0x91, aTxBuffer, 32);
Du rufst hier eine Funktion auf, befindest dich aber (noch)
im Deklaration-Teil deiner Source.
Der Funktionsaufruf muss irgendwo in main(..) stehen.
Stefan F. schrieb:>> Ich habe einen Screenshot für dich gemacht.>> Es wäre erheblich effizienter gewesen, das ganze Projekt irgendwo zum> Download bereit zu stellen.
als Anhang hochladen dann gäbe es eine Codeansicht!
Er muss auch noch das Forum bedienen lernen!
Michael R. schrieb:> Was fehlt mir deiner Meinung nach an C?
der Unterschied von
aTxBuffer zur &aTxBuffer bei Arrays
Mitlesa schrieb:> Der Funktionsaufruf muss irgendwo in main(..) stehen.
Sinnvollerweise beachtet man die Kommentare, die CubeMX generiert hat.
Sonst geht das alles bei der nächsten Konfigurationsänderung wieder
kaputt.
Stefan F. schrieb:> Vermutlich fehlen Dir noch mehr Sachen.
Ja da fehlt es offensichtlich noch an vielen Sachen.
Copy&Paste geht so einigermassen.
Aber wir sehen das alles ganz falsch, denn:
Michael R. schrieb:> Mit C komme ich klar,
.... wenn man solch kapitale Böcke schiesst ....
Mitlesa schrieb:> Ja da fehlt es offensichtlich noch an vielen Sachen.
absolut, langsam wirds frech
ich kopiere den Code in einen Editor und bleibe hängen an
#include "main.h"
welchen er nicht mitgeliefert hat, so kann man keine Fehler finden oder
nur als Hellseher!
Tja. Das muss man leider so sagen, Michael:
Zwischen:
Michael R. schrieb:
> Mit C komme ich klar,
und Deinem Quellcode klafft eine enorme Lücke.
Da fehlt es m.M.m. nicht an einem Detail, sondern an Grundlagen.
Ausserdem solltest Du, wenn schon nicht auf Anhieb und vollständig
korrekt, die Fehlermeldungen deuten können. Zumindest solltest Du eine
begründete und plausible Vermutung haben und darstellen können, was Du
versucht hast und warum es nicht geklappt hat. Ich rede hier
wohlgemerkt, nur von den syntaktischen Fehlern.
Ist doch ganz einfach: Wenn da steht "unexpected" dann wird da wohl was
anderes erwartet. Was, steht in dem C-Buch.
Und da kommen wir dann zu Deinen zwei Formfehlern.
Erstmal lautet die Frage nicht, wie Du mit HAL die I2C-Schnittstelle
bedienst um einen AD-Wandler anzusteuern, sondern vielmehr: Was bedeutet
die Fehlermeldung?
Ein eher böser Lapsus, denn Deine Postings lesen sich wie eine
Verarschung à la: Ich sag Euch mein wirkliches Problem nicht, dass ist
viel zu primitiv und umfangreich und ich schäme mich soviel von Euch zu
verlagen, sondern ich stelle das Problem als ein komplexes da und rechne
damit, dass sich jemand herausgefordert fühlt und meine
Grundlagenprobleme so nebenbei löst, weil ich ja den Code nur noch
kopieren brauche.
Zweitens hast Du die Benutzerhinweise nicht beachtet. Langen Code als
Anhang. Nicht schlimm, aber das I-Tüpfelchen zu der Reaktion: "Oh
heiliges Spaghetti-Monster. Bloss weg hier".
Ach. Und da klingt sowas heraus, wie: Nun stellt Euch mal nicht so an
und reißt Euch am Riemen.
Aber denk mal dran: Nicht wir haben das Problem sondern Du. Wir können
das. Offen gesagt ist das mit den Fehlermeldungen schlichte Krümelkacke.
Da musst Du nun durch oder such Dir ein anderes Hobby.
In diesem Sinne: Nichts für ungut, ein schönes Leben noch und frohe
Weihnachten.
Mitlesa schrieb:> Der Funktionsaufruf muss irgendwo in main(..) stehen.
Nicht unbedingt.
Mitlesa schrieb:> Stefan F. schrieb:>> Vermutlich fehlen Dir noch mehr Sachen.>> Ja da fehlt es offensichtlich noch an vielen Sachen.>> Copy&Paste geht so einigermassen.>> Aber wir sehen das alles ganz falsch, denn:>> Michael R. schrieb:>> Mit C komme ich klar,>> .... wenn man solch kapitale Böcke schiesst ....
Derjenige, der so was schreibt, unterschreibt in seiner sozialen
Unkompetenz.
Joachim B. schrieb:> als Anhang hochladen dann gäbe es eine Codeansicht!
Mache ich.
Joachim B. schrieb:> Er muss auch noch das Forum bedienen lernen!
Wozu, du liest meine Posts auch so. )))
Theor schrieb:> Ausserdem solltest Du, wenn schon nicht auf Anhieb und vollständig> korrekt, die Fehlermeldungen deuten können. Zumindest solltest Du eine> begründete und plausible Vermutung haben und darstellen können, ...
Soll ich eine Vermutung liefern? Plausibel? Wozu bin ich denn hier? Um
eine Antwort zu bekommen, wie "gut" ich in C bin?
> ... was Du> versucht hast und warum es nicht geklappt hat. Ich rede hier> wohlgemerkt, nur von den syntaktischen Fehlern.> Ist doch ganz einfach: Wenn da steht "unexpected" dann wird da wohl was> anderes erwartet. Was, steht in dem C-Buch.
Wenn man ein Buch zitiert, schreibt man normalerweise den Autor, das
Titel und Jahr, die Seitennummer würden auch nicht schaden. ))
Theor schrieb:> Ein eher böser Lapsus,...
Ich zittere wie ein Herbstblatt vor deinen Worten, die ganze Welt
erfährt über meine Unkompetenz in der Programmierung und Elektronik!
"böser Lapsus"! Hast du mir damit meine Frage beantwortet? )))
Theor schrieb:> Ach. Und da klingt sowas heraus, wie: Nun stellt Euch mal nicht so an> und reißt Euch am Riemen.> Aber denk mal dran: Nicht wir haben das Problem sondern Du. Wir können> das.
Ich habe meine Frage gestellt, weil ich etwas nicht kann/weiß. Sogar
eine Antwort bekommen: "Wir können das", kann man resümieren. Dazwischen
steht alles mögliche #include "Beleidigungen.h" außer einer
vollständigen (oder auch nicht unbedingt) Antwort, nicht von Mitlesa,
Stefan F. oder von dir.
> Offen gesagt ist das mit den Fehlermeldungen schlichte Krümelkacke.
Hast du mir diese "schlichte Krümelkacke" erklärt? Hast du andere Posts
von mir gelesen? (außer "Spaghetti-Monster") )) Auch die, wo ich
nachgefragt habe, was ich genau nachlesen soll? Und verstanden, das ich
Hilfe im Fach brauche, in dem ich weniger verstehe als du?
Theor schrieb:> ... weil ich ja den Code nur noch> kopieren brauche.
Warum ist es ein Problem, einen Code von jemanden zu kopieren?
Wenn jemand nicht schreiben möchte oder eine Antwort/aufklärende Frage
hat, kann einfach das Thema ignorieren. Ich werde mich nicht beleidigt
fühlen. Es ist lieber, als durch eure unschöne Posts beleidigt "gefüllt"
zu sein.
Michael R. schrieb:> /* USER CODE BEGIN Header */......
Jetzt hast du nun eine ganze Quellcode-Wüste gepostet. Hör auf damit! -
ich meine konkret: Hör auf mit dem Benutzen solchen von ST-Utilities
erzeugtem Quellcodes und stelle dich endlich auf deine eigenen Beine.
So wie dieser Thread bislang aussieht, hast du die ganze Zeit gegen HAL
und Cube gekämpft und jedesmal verloren.
Ich häng dir mal was zum Lesen hier dran: Eine simple
Soft-Implementation für den I2C. Damit du erstmal ein Gefühl dafür
kriegst, wie so im Prinzip der I2C funktioniert.
Nix mit Callback-Funktionen und so.
Stattdessen die ganz einfache Leier:
mit Do_I2C_Start startet man einen Transfer auf dem I2C
mit Do_I2C_Write oder Do_I2C_Read transferiert man jeweils ein Byte
mit Do_I2C_Stop beendet man den Transfer (und gibt den Bus frei)
Der ganze Kram stammt von einem steinalten Projekt mit einem Kinetis
MK02FN128. Für den alleruntersten Datenverkehr (SCL bzw. SDA hi oder lo
und SDA lesen) mußt du dir für deinen µC deshalb diese
Primitivfunktionen selber schreiben - ebenso das Einrichten deiner zwei
Pins auf GPIO mit Open Drain.
W.S.
Michael R. schrieb:> Wie funktioniert diese Funktion?> bool Get_SDA (void)> { return (GPIOB_PDIR & 2) != 0; }
Das ist kurze Form von:
1
boolGet_SDA(void)
2
{
3
if((GPIOB_PDIR&2)!=0)// Wenn Bit 1 in GPIOB_PDIR HIGH ist, ...
4
returntrue;
5
else
6
returnfalse;
7
}
Michael R. schrieb:> Wofür steht diese Zeile?> GPIOB_PDDR |= (1+2);
1 ist der Wert von Bit 0.
2 ist der Wert von Bit 1.
Also ergibt die Addition binär 00000011
> Was passiert, wenn "maske" letztendlich gleich Null wird?> if (sende & maske) SDA_high(); else SDA_low();
Wenn die maske=0 ist, dann ist der if-Ausdruck immer false, so daß der
else-Teil ausgeführt wird.
> if (Get_SDA()) lese = lese | maske;
Wenn get_SDA() true ist, dann wird die Variable "lese" auf den Wert von
"lese | maske" gesetzt. Oder anders gesagt: In der Variable "lese"
bleiben nur noch die Bits HIGH, die durch die Maske vorgegeben sind.
Ach herrje - wieso verstehst du selbst jetzt noch immer nicht die
grundlegenden Dinge ds I2C ?
Michael R. schrieb:> Warum werden hier 1 und 2 zugewiesen?> void SCL_low (void)> void SCL_high (void)> void SDA_low (void)> void SDA_high (void)
Also hör mal, das sind die Lowest-Level-Primitiv-Funktionen, die wie ihr
Name sagt, SCL und SDA anzusteuern haben. Wie du die bei deinem µC
schreibst, ist deine Aufgabe. Es sollte ja wohl keine unüberwindliche
Schwierigkeit sein, jeweils ein Pin des µC auf low oder high zu setzen.
Ebenfalls sollte es kein Ding sein, die betreffenden Ports auf Opendrain
zu initialisieren.
> Wie funktioniert diese Funktion?> bool Get_SDA (void)
Diese Funktion soll den momentanen Zustand der SDA Leitung liefern, das
ist entweder low oder high. Hier gilt das Gleiche wie oben: selber
machen.
> Wofür steht diese Zeile?> GPIOB_PDDR |= (1+2); // PTB0 und PTB1 auf Output, Opendrain
Das lies im Manual zum betreffenden Kinetis-µC nach, falls du genau
diesen Chip zu benutzen gedenkst und den Kommentar nicht verstehst.
Andernfalls richte dir die Peripherie deines µC gemäß dessen
tatsächlichen Gegebenheiten ein.
> Was passiert, wenn "maske" letztendlich gleich Null wird? Ich brauche> auch eine Erläuterung zur Zeile mit Get_SDA. Was bedeutet sie?> while (maske)
Wenn "maske" letztendlich 0 wird, ist die Schleife zu ende. Das ist
alles. Immerhin ist das schlußendlich sparsamer als einen
Schleifenzähler zu benutzen, dann eine Maske per (1<<zähler) zu erzeugen
und obendrein auch noch den Zähler zu inkrementieren und auf
Endebedingung zu testen.
Michael R. schrieb:> Wozu multipliziere ich die Adresse mit 2 und füge 1 im Falle R_W = 1> hinzu?
Weil die I2C-Adresse genau 7 Bit umfaßt und ab Bit 1 auszugeben ist. Bit
0 hingegen entscheidet, ob das Nachfolgende eine Lese- oder
Schreib-Operation sein soll.
Lies einfach zuerst eine einführende Erklärung, wie der I2C überhaupt
funktioniert, bevor du dich daran machst, sowas wie AD7746 und so weiter
verbasteln zu wollen. Was ich hier habe lesen müssen, riecht mir derart
nach Maker-Mentalität, daß es mich ausgesprochen grimmig macht. Immer
wieder wollen Leute irgend welche hochtrabenden Projekte realisieren,
von denen sie nicht einmal ansatzweise die blutigen Grundlagen kennen,
geschweige selbige tatsächlich verstehen.
W.S.
Danke für deinen Beitrag.
W.S. schrieb:> Lies einfach zuerst eine einführende Erklärung, wie der I2C überhaupt> funktioniert, bevor du dich daran machst, sowas wie AD7746 und so weiter> verbasteln zu wollen. Was ich hier habe lesen müssen, riecht mir derart> nach Maker-Mentalität, daß es mich ausgesprochen grimmig macht. Immer> wieder wollen Leute irgend welche hochtrabenden Projekte realisieren,> von denen sie nicht einmal ansatzweise die blutigen Grundlagen kennen,> geschweige selbige tatsächlich verstehen.
Ich habe um die Erklärung für mich unklarer Stellen gebeten. Für dich
sind die leicht zu verstehen, für mich nicht. Schade, dass man erstmal
ein Niveau erreichen muss, um die nächste Frage zu stellen.
Hm, ich bin etwas verwirrt. Jemand behauptet, er habe keine Probleme mit
C. Und dann stellt er Fragen zu den einfachsten Dingen wie Schleife oder
| Operator.
Da würde ich erst einmal ein gutes C Buch empfehlen. Nur ein
Web-Totorial mit einem bisschen Copy&Paste erzeugen noch keinen guten
Programmierer.
Und um die Ablauf von Programmen zu verstehen, hat man früher printf's
eingebaut und ist das noch mal von Hand und den Ausgaben durchgegangen.
Selbst diese simple Technik wird schon nicht mehr angewendet.
Früher war irgendwie mehr Eigeninitiative. Heute braucht man für jede
Zeile einen Fragethread in einem Forum.
W.S. schrieb:> Weil die I2C-Adresse genau 7 Bit umfaßt und ab Bit 1 auszugeben ist. Bit> 0 hingegen entscheidet, ob das Nachfolgende eine Lese- oder> Schreib-Operation sein soll.
Was hat 7-Bit der Adresse mit der Multiplikation mit 2 zusammen(es ist
eine Verschiebung nach links, richtig)?
Wenn 1 Bit zu 'b' hinzugefügt wird, werden die 7 Bit zu 8?
Oder sind das 8 Bit und das achte Bit wird geändert?
Michael R. schrieb:> Wozu multipliziere ich die Adresse mit 2 und füge 1 im Falle R_W = 1> hinzu?
Weil die Adresse in den Bits 1 bis 7 liegt. Das Bit 0 ist das R/W Flag.
Die Multiplikation mit 2 verschiebt die Adresse um ein Bit.
Adresse: 1001011
·2 = 10010110
+ r/w Flag HIGH = 10010111
Michael R. schrieb:> PittyJ schrieb:>> er habe keine Probleme mit C>> Wozu hast du dein Offtopic-Post hier geschrieben?
Damit du erkennst, dass du von dem Krams hier überfordert bist, und dich
erst einmal der Basis-Kenntnis von C zuwendest.
Michael R. schrieb:> Was hat 7-Bit der Adresse mit der Multiplikation mit 2 zusammen(es ist> eine Verschiebung nach links, richtig)?
ernst gemeinter Rat: wende dich einem anderen Hobby zu. Aerobics, Malen,
Politikwissenschaften.. auf alle Fälle etwas, das keinerlei logisches
Denken erfordert.
Schluß jetzt.
W.S.
Für den Anfang ist die I²C Schnittstelle vielleicht ein bisschen zu
komplex.
Youtube und Arduino verleiten leider dazu, nicht mit zu komplexen Dingen
zu übernehmen.
Stefan ⛄ F. schrieb:> Für den Anfang ist die I²C Schnittstelle vielleicht ein bisschen zu> komplex.>> Youtube und Arduino verleiten leider dazu, nicht mit zu komplexen Dingen> zu übernehmen.
Von der Logik der Schnittstelle geht noch. Hier soll ich mir den Weg
bahnen können. Ich habe schon mehrmals die Protokolbeschreibung gelesen
und es klingt nicht mehr so kompliziert und verwirrend. Was die
Übertragung dieser Logik in eine Sprache (C meine ich) ist, fällt mir
etwas schwerer.
Michael R. schrieb:> Noch eine Offtopic-Antwort
Junge, wenn jemand wie du sich etwas vornimmt, wofür er sachlich noch
garnicht in der Lage ist, und dann hier in diesem Forum nach Hilfe ruft,
diese auch bekommt - und trotzdem noch nicht weiter kommt, weil er
selbst das Verstehen dieser Hilfe noch nicht hinkriegt, dann ist dreiste
Frechheit und überhebliches Auftreten eine denkbar ungeeignete Reaktion
deinerseits. Du solltest dir das merken.
W.S.
W.S. schrieb:> dann ist dreiste> Frechheit und überhebliches Auftreten eine denkbar ungeeignete Reaktion> deinerseits. Du solltest dir das merken.
Jetz red doch nicht immer von dir selbst.
Mw E. schrieb:> Jetz red doch nicht immer von dir selbst.
Ich kann W.S. nur zustimmen. Der TO versteht die kleinsten
Schritte nicht die man ihm vorkaut, daher ist er bei seinem
Projekt voll überfordert und sollte sich was anderes suchen.
Ich zitiere hier nochmals die Selbsteinschätzung des TO
die Bände spricht.
Michael R. schrieb:> Mit C komme ich klar
Nein, ganz wirklich gar nicht.
@Mitlesa:
Im prinzip hast du da recht, nur sollte so ein W.S. sehr leise sein und
andere nicht als überheblich auftretend betiteln.
Denn so ist er es, der im Projekte Forum die Projekte durch den Dreck
zieht wenn diese nicht so aufgebaut sind wie er sich das vorstellt.
(Also wie bei seiner komischen Lernbetty)
Als wär er der Nabel der Welt.
Das geht inzwischen schon so weit, dass manche einen "W.S. Disclaimer"
unter den Beitrag packen.
W.S. schrieb:> Junge, wenn jemand wie du sich etwas
Und noch eine...
Ich habe hier freundlicherweise Antworten auf meine Fragen bekommen. Von
Stefan ⛄ F.z.B. Und mehrere anderen.
Du belernst mich, was ich in meinem Leben unternehmen soll? Kennst du
mich? Reichen dir wenige Posts, um einen Menschen zu identifizieren(mich
in dem Falle)? Verzweifelnd. Baue bitte deinen Stress wo anders ab.
Danke
Mitlesa schrieb:> Michael R. schrieb:>> Mit C komme ich klar>> Nein, ganz wirklich gar nicht.
Es ist so schön, dass mir diese Zitat schon 1000 mal in diesem Topic
vorgeworfen wurde. Was hast du damit erreicht?
Michael R. schrieb:> Es ist so schön, dass mir diese Zitat schon 1000 mal in diesem Topic> vorgeworfen wurde. Was hast du damit erreicht?
Dir vor Augen zu halten dass du an erheblichen
Wahrnehmungsstörungen leidest.
Die Wahrnehmungsstörungen erkennt man auch daran dass man hier
in diesem Thread keine 1000 Vorwürfe bezüglich deines Kenntnis-
standes über C-Programmierung findet.
Mitlesa schrieb:> dass du an erheblichen> Wahrnehmungsstörungen leidest
Soll ich daran nicht leiden, wenn ich zehn unangenehme Sachen neben
einem nützlichen Beitrag finde?
Warum muss ich aus diesem Müll sachliche Vorschläge und echte Hilfe
rauskratzen?
Michael R. schrieb:> Warum muss ich aus diesem Müll sachliche Vorschläge und echte Hilfe> rauskratzen?
"Ich möchte mit meinem Kampfjet gerne einen Looping fliegen. Ich habe
das Flugzeug mit Diesel getankt, habe also Ahnung von der Technik. Wie
fliege ich einen Looping?"
- "Da gehört kein Diesel rein, anscheinend fehlen dir doch die
Grundlagen. Wenn du die drauf hast, können wir über Flugmanöver
sprechen."
"Darum geht es nicht. Warum sagt mir niemand, wie ich jetzt mit meinem
mit Diesel vollgetankten Kampfjet einen Looping fliegen kann?"
Michael R. schrieb:> Warum muss ich aus diesem Müll sachliche Vorschläge und echte Hilfe> rauskratzen?
du meckerst über sozialen umgang aber bist selber keinen deut besser
du erwartest von leuten Hilfe , und lässt dir nichts sagen.
du sagst das du mit C kein Problem hast .
OK ..
Ich unterstelle dir daher einfach nur unwissenheit mit dem umgang der
Programmiersprache C.
Wo funktionen hingehören und wie ein µC funktioniert sollte man hier
zumindest mal halbwegs wissen... VORHER
Wie der AD Wandler funktioniert steht im Datenblatt.
Wenn du dennoch solch einen quark wie oben gezeigt versuchst, hast du so
einiges nicht verstanden.
Dann mecker nicht rum und frag vernünftig nach.
Im normalfall mit brauchbaren Kentnissen ist das eine sache von maximal
einer stunde.
weiß man was man tut und kennt den bus und das Bauteil an einem Bus ist
nach 5min das ding gegessen.
Der obere ansatz mit der HAL war definitiv nicht falsch!
Manche meinen man muss beim urschleim anfangen ...
nur muss man gewisse dinge auch beachten und vieleicht auch sinnvolle
informationen liefern.
( schaltplan, welche pins werden genutzt )
HAL funktioniert schon ... wenn man es richtig nutzt.
ebenso der AD ... der tut was er soll , wenn man ihn richtig ansteuert.
Einen Baustein der nur binär ( 0 und 1 ) versteht mit text zu belasten
bringt hier nichts. ( was du oben getan hast )
solange der AD kein gültiges kommando bekommt tut er nichts und wird
auch nicht antworten ( warum auch ... )
Welche dinge er versteht , steht im Datenblatt
hierzu vorher die seiten mit I²C read und write lesen und so due
lese/schreibe funktionen dazu anpassen
fghghjr56zrthftrrrzrtrtzrtzrtzrtzrtzrtzr schrieb:> HAL funktioniert schon ... wenn man es richtig nutzt.> ebenso der AD ... der tut was er soll , wenn man ihn richtig ansteuert.
So ist es.
Solange man nichts spezielles macht, benötigt man nur zwei Funktionen
aus der HAL und I2C funktioniert einwandfrei:
Zum was lesen:
I2CADDRESS_AS5601 = I2C Slave Adresse
ReadAddress = Registeradresse von der man was auslesen will
I2C_MEMADD_SIZE_8BIT = In diesem Beispiel ist die länge der
Registeradresse 1 Byte
data = In dieses Array bzw. Pointer werden die gelesenen Daten
reinkopiert
size = Anzahl zu lesender Bytes
Dann muss man nur noch eine Callbackfunktion implementieren, welche
automatisch aufgerufen wird, sobald der DMA die Daten fertig ausgelesen
hat:
Sebastian R. schrieb:> "Ich möchte mit meinem Kampfjet gerne einen Looping fliegen. Ich habe> das Flugzeug mit Diesel getankt, habe also Ahnung von der Technik. Wie> fliege ich einen Looping?"
Du hast Recht. Die Formulierung in deinem Beispiel ähnelt meiner. Ich
bin aber weiter gegangen und habe weitere Fragen gestellt. Ich gebe zu,
ich verstehe nicht alles bezüglich meines Themas. Dafür bin ich aber auf
diesem Forum gelandet, um von den erfahreneren Mitglieder Hilfe zu
bekommen und das Material besser zu verstehen.
fghghjr56zrthftrrrzrtrtzrtzrtzrtzrtzrtzr schrieb:
Danke für deine Hinweise. Ich hoffe, mein C inzwischen zu verbessern.
Und nicht nur. ))
Johnny B. schrieb:> Johnny B.
Klasse!
Danke!