Willkommen in unserer Community

Werde Teil unserer Community und registriere dich jetzt kostenlos ...

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

C Energy Monitoring mit einem STPM32

Dieses Thema im Forum "Software" wurde erstellt von Janiiix3, 27. Juni 2017.

  1. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    976
    Zustimmungen:
    4
    Ort:
    Hannover
    Sprachen:
    C#
    Map
    Moin Moin.

    Bin gerade mal wieder dabei einen SPI Baustein zum reden zu bringen.
    Das reden, hat er schon gelernt. Das schreiben mag er noch nicht.
    Im Datenblatt steht das ein Kommando oder Frame immer mindestens 4 Bytes lang ist..

    lese_adresse, schreib_adresse, data_byte_1, data_byte_2

    Also wie beschrieben, Funktioniert das lesen.

    Das ist meine schreib Funktion..


    CodeBox C und C++
    void stpm32x_write(uint8_t addr, uint32_t cmd){
    
    spi_select_low();
    spi_usartx_tx_rx(0xff); // Previously requested data byte LSB
    spi_usartx_tx_rx(addr); // Previously requested data byte 2 out of 4
    spi_usartx_tx_rx((cmd & 0x00FF0000)>>16); // Previously requested data byte 3 out of 4
    spi_usartx_tx_rx((cmd & 0xFF000000)>>24); // Previously requested data byte MSB
    spi_select_high();
    
    _delay_ms(50);
    
    spi_select_low();
    spi_usartx_tx_rx(0xff); // Previously requested data byte LSB
    spi_usartx_tx_rx(addr+1); // Previously requested data byte 2 out of 4
    spi_usartx_tx_rx((cmd & 0x0000FF00)>>8); // Previously requested data byte 3 out of 4
    spi_usartx_tx_rx((cmd & 0x000000FF) ); // Previously requested data byte MSB
    spi_select_high();
    }
    


    Achso..
    Arbeiten tu ich im SPI Mode 3!

    Hier das Datenblatt
    www.st.com/resource/en/datasheet/stpm34.pdf
     
    #1 Janiiix3, 27. Juni 2017
    Zuletzt bearbeitet: 27. Juni 2017
  2. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.044
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C#, Assembler, Pascal, C++, PHP, Java
    Map
    Ich habe mir das Datenblatt angeschaut ...
    Mir ist aufgefallen, dass du beim zweiten Word (Bit 15..0) MSB und LSB vertauscht hast.
    LSB wird immer zuerst übertragen.

    Möglicherweise ist CRC aktiviert. Da du kein CRC sendest, wird der Slave das Write Kommando nicht ausführen ...
    Möglicherweise liegt es daran.
    CRC deaktivieren:
    upload_2017-6-27_9-3-21.png
     
  3. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    976
    Zustimmungen:
    4
    Ort:
    Hannover
    Sprachen:
    C#
    Map
    Da stand doch..


    CodeBox C und C++
    5 (optional) Master CRC verification packet Slave CRC verification packet
    


    Das 5 Byte Optional ist?
     
  4. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.044
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C#, Assembler, Pascal, C++, PHP, Java
    Map
    Optional, weil deaktivierbar?

    Ich gehe davon aus, wenn CRC aktiviert ist (default), dann muss es auch übertragen werden.

    Wenn du Registerinhalte liest und nach dem 4 Byte abbrichst und CRC ignorierst, merkt das ja der Slave nicht.

    Wenn du allerdings für eine Schreiboberation CRC nicht überträgst, wird der Slave diese nicht ausführen.
    Zumindest vermute ich das mal, ich habe das Datenblatt nun nicht komplett durchgearbeitet.
    Aber falls es nicht so wäre, würde die Sicherheitsmaßnahme nicht so gut greifen.
     
  5. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    976
    Zustimmungen:
    4
    Ort:
    Hannover
    Sprachen:
    C#
    Map
    Muss ich auf das ausschalten Kommando des CRC´s Mode, auch eine CRC bilden?
    Wenn ich es so versuche und danach das Register wieder auslese, ist das Bit nach wie vor gesetzt,,



    CodeBox C und C++
    spi_select_low();
    spi_usartx_tx_rx(0x24); // Previously requested data byte LSB
    
    spi_usartx_tx_rx(0x24); // Previously requested data byte 2 out of 4
    
    spi_usartx_tx_rx(0x07); // Previously requested data byte 3 out of 4
    
    spi_usartx_tx_rx(0x00); // Previously requested data byte MSB
    
    spi_select_high();
    


    Hiermit sollte das CRC Feature aus sein.
     
  6. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.044
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C#, Assembler, Pascal, C++, PHP, Java
    Map
    Ich vermute.

    Sende einmal folgendes.

    0x24 0x24 0x07 0x00 0x15

    CRC = 0x15 nach CRC8-CCITT mit Polynom 0x07 und Startwert 0
     
  7. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    976
    Zustimmungen:
    4
    Ort:
    Hannover
    Sprachen:
    C#
    Map
    Das Funktioniert. Wieso gibt man so etwas im Datenblatt an? Jemand der so was noch nie gemacht hat bzw. mit dem Chip gearbeitet hat, wird doch verrückt.
     
  8. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.044
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C#, Assembler, Pascal, C++, PHP, Java
    Map
  9. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    976
    Zustimmungen:
    4
    Ort:
    Hannover
    Sprachen:
    C#
    Map
    Diese Funktionen habe ich schon mal gesehen. Was meint ihr? Sollte man mit CRC Checksummen arbeiten um die plausibilität der Daten zu gewährleisten?

    Gibt es eigentlich ein tolles Buch, wo solch Rechenwege wie eben diese "Polynom Division" schön erklärt wird?
     
  10. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.668
    Zustimmungen:
    37
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Mathebuch Sekundarstufe I oder II ?!?
     
  11. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.044
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C#, Assembler, Pascal, C++, PHP, Java
    Map
    ... oder auch mal bei wikipedia schauen.
    Zyklische Redundanzprüfung

    Die Antwort steht eigentlich in deiner Frage ;)

    Probiere es doch einfach aus.
     
  12. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.599
    Zustimmungen:
    42
    Ort:
    127.0.0.1 ;)
    Sprachen:
    C#, Assembler, LunaAVR, VB.Net, Python
    Bei RS232 und Baudraten >115K ist das Pflicht. Da geht sonst alles durcheinander, primär wegen billiger China Ware was die Pegelwandler angeht. SPI hab ich auch schon ohne Probleme mit 1 oder 2 MHz befeuert.

    Und OPTIONAL heißt dass es vom Chip her optional ist, nicht aber zwangsweise auch für die Aktion die du durchführen möchtest. Blödes Beispiel:
    Function Login(User As Sring, Optional Password As String) As Boolean
    Du könntest das Passwort weg lassen wenn der Benutzer bereits angemeldet ist, oder die Passwortüberprüfung generell deaktiviert ist, also nur in 2 von 3 Möglichkeiten ;)
     
  13. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.044
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C#, Assembler, Pascal, C++, PHP, Java
    Map
    Hallo Jan,

    hast du mal mit CRC probiert. Kommst du klar?

    Dirk :ciao:
     
  14. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    976
    Zustimmungen:
    4
    Ort:
    Hannover
    Sprachen:
    C#
    Map
    Moin Dirk.

    Ja das klappt mit den fertigen Funktionen von Atmel. Ich muss mir das mal auf nen Zettel aufschreiben, damit ich die Rechnung auch nachvollziehen kann.
     

Diese Seite empfehlen

  • Über uns

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)