- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 32

Thema: SMT32 - Ports konfigurieren, Frage zur C-Syntax

  1. #21
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Anzeige

    E-Bike
    Zitat Zitat von Unregistriert Beitrag anzeigen
    Auch das ist nicht richtig. Der Grund ist, dass hier für den atomaren Zugriff ein Register geschaffen wurde, welches ein Setzen oder Zurücksetzen der Pins ermöglichen sollte.
    Da ist ein Lesen natürlich unsinnig. Daher ist das ein WriteOnly-Register.
    Dann erklär dich mal.
    z.B. bei einer I2C-Emulation muss man SDA zwischen Ein- und Ausgang umschalten. Wäre einfacher mit einem R/W-Register, besonders weil für I2C nur zwei Pins benötigt werden.
    Rein technisch wäre es kein Problem nur R/W-Register zu verwenden. Wobei 10-20 zusätzliche Transistoren für ein 8-Bit Register kein Problem sein sollten.

    Vermutlich sind die W/O-Register heute einfach nur alte Zöpfe.
    Heute ist die µC-Entwicklung mehr oder weniger ein Lego-System. Man nimmt die fertigen Module aus der Bibliothek und der Computer fügt alles zusammen.
    Da die Module in VHDL o.ä. definiert sind, können sie mit jedem Prozess verwendet werden. Manche dieser VHDL-Module sind im Kern, schon 20-30 Jahre alt und wurden nur ausgebaut.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  2. #22
    Unregistriert
    Gast
    Was gibt es da zu erklären?
    Wir reden hier über das BSRR-Register und nicht I2C oder sonstwas.
    Und da ist der einzige Grund der atomare Zugriff. Punkt.

    Zum Auslesen gibt es das ODR- bzw. das IDR-Register.


    ARM verwendet übrigens haupsächlich Verilog, insbesondere für den Kern. Einige PrimeCells sind auch in VHDL erhältlich.



    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    Dann erklär dich mal.
    z.B. bei einer I2C-Emulation muss man SDA zwischen Ein- und Ausgang umschalten. Wäre einfacher mit einem R/W-Register, besonders weil für I2C nur zwei Pins benötigt werden.
    Rein technisch wäre es kein Problem nur R/W-Register zu verwenden. Wobei 10-20 zusätzliche Transistoren für ein 8-Bit Register kein Problem sein sollten.

    Vermutlich sind die W/O-Register heute einfach nur alte Zöpfe.
    Heute ist die µC-Entwicklung mehr oder weniger ein Lego-System. Man nimmt die fertigen Module aus der Bibliothek und der Computer fügt alles zusammen.
    Da die Module in VHDL o.ä. definiert sind, können sie mit jedem Prozess verwendet werden. Manche dieser VHDL-Module sind im Kern, schon 20-30 Jahre alt und wurden nur ausgebaut.

    MfG Peter(TOO)

  3. #23
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473
    Hallo allerseits

    Ich hab mich diese Woche mal ausgiebig mit dem Kapitel RCC im Datenblatt beschäftigt, alledings hab ich da noch ein paar Unklarheiten.

    1. Was genau soll diese f(VCO) sein, von der in den Formeln zum Einstellen der Multiplikatoren immer die Rede ist? (Kapitel 6.3.2)
    2. Was hat es mit "PLL" auf sich? Ist das der Taktmultiplikator?

  4. #24
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von White_Fox Beitrag anzeigen
    1. Was genau soll diese f(VCO) sein, von der in den Formeln zum Einstellen der Multiplikatoren immer die Rede ist? (Kapitel 6.3.2)
    2. Was hat es mit "PLL" auf sich? Ist das der Taktmultiplikator?
    In meinem Datenblatt steht da unter 6.3.2 was ganz anderes.
    Es ist da hilfreich einen Link auf das verwendete Datenblatt zu setzen, da gibt es oft unterschiedliche Versionen:
    http://www.st.com/content/ccc/resour...DM00141306.pdf
    Hier sind die PLLs unter 6.3.11 zu finden.

    Die CPU kann mit bis zu 180MHz getaktet werden.
    Der Interne Oszillator hat aber nur 16MHz, ein externer Quarz liegt zwischen 4...26 MHz und mit einem externen Takt kann man bis maximal 50MHz takten.

    Mit einer PLL kann man nun eine Frequenz vervielfache, aber auch teilen.
    Mit einer PLL kann man Frequenzen erzeugen welche in einem ganzzahligen Verhältnis zu einer Referenzfrequenz stehen.

    Das Herzstück ist ein VCO (Voltage-Controlled Oscillator, Spannungs-Frequenz Wandler), das Problem bei einem VCO ist, dass seine Frequenzstabilität recht mies ist. es gibt auch hochgenaue Schaltungen, welche den DCF77 (Zeitzeichensender der PTB) verwenden. Nicht nur die Zeit wird von der Atomuhr erzeugt, sondern auch die Trägerfrequenz von 77.5kHz.
    Wenn man aber die VCO-Frequenz mit einer stabilen Frequenz, z.B. eines Quarzes, vergleicht und nachregelt, erreicht man die Frequenzkonstanz des Quarzes.
    Wenn man die Frequenz des VCOs nun Teilt, liegt die VCO-Frequenz entsprechend höher als die Referenzfrequenz. Als nächstes kann man den Teiler noch einstellbar machen und kann dann eine VCO-Frequenz erzeugen, welche ein ganzzahliges vielfaches der Referenz-Frequenz ist. Hinzu kommt noch, dass die Phasenlag der beiden Frequenzen konstant ist.

    Nun kann man den Teiler aber auch an der Referenz-Frequenz anschliessen und entsprechend niedrigeren Frequenzen erzeugen.

    fVCO ist die Frequenz der PLL, da sie am VCO abgegriffen wird.

    Dein STM32F446x verwendet mehrere PLLs, dadurch lassen sich die Taktfrequenzen verschiedener Einheiten unabhängig voneinander einstellen.

    https://de.wikipedia.org/wiki/Phasenregelschleife

    MfG Peter(TOO)
    Geändert von Peter(TOO) (24.06.2016 um 00:39 Uhr)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  5. #25
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473
    Haha...super, daß bringt mich doch schon wieder viel weiter. Vielen Dank.

    Was würde ich ohne euch bloß machen...wie hat man sich solches Wissen eigentlich früher ohne Internet angeeignet, wo man noch nichtmal einfach so ein Datenblatt runterladen konnte? Man hat doch sicherlich nicht 1500 Seiten Dokumentation mit der Post vershickt...? Und wenn, dann sicherlich nur an Firmen...

  6. #26
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Man hat doch sicherlich nicht 1500 Seiten Dokumentation mit der Post vershickt...? Und wenn, dann sicherlich nur an Firmen...
    ich könnte mal in den Keller meiner Eltern gehen, mein alter Herr hat auch gern gebastelt und kann ein Lied davon singen bzw. einen Schrank mit Dokumenten nach dir werfen

    damals gabs ja auch noch net soooo komplexe chips, da war 386er PC in Mode
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  7. #27
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Zitat Zitat von White_Fox Beitrag anzeigen
    Was würde ich ohne euch bloß machen...wie hat man sich solches Wissen eigentlich früher ohne Internet angeeignet, wo man noch nichtmal einfach so ein Datenblatt runterladen konnte? Man hat doch sicherlich nicht 1500 Seiten Dokumentation mit der Post vershickt...? Und wenn, dann sicherlich nur an Firmen...
    Ich bin seit 1976 beruflich bei den µPs dabei. Da hat sich einiges angesammelt.
    Damals waren die Chips noch wesentlich einfacher und vieles waren noch Datenblätter. Meist waren nur die Programmierunterlagen ein Buch.
    Was man heute in einem einzelnen µC hat, wäre damals eine Leiterplatte, in mindestens der Grösse eines Kuchenblechs gewesen.
    3x 16-Bit Timer gab es in einem 40-Pin Gehäuse. 2x 8-Bit Ports gab es auch in dieser Grösse.

    Doch, damals wurde alles per Post verschickt. Anfangs gab es Datenbücher, die bekam man bis Ende der 70er einfach so zugeschickt, wenn wieder neue aufgelegt wurden, Dazwischen gab es mal ein Datenblatt für neue Chips.
    Als Entwickler musste man auch viel per Telefon nachfragen. Da gab es öfters auch mal Datenblätter für Chips, welche dann gar nie hergestellt wurde. Man hatte deshalb zwangsweise Kontakt mit den Lieferanten und Vertretungen. Als schlauer Entwickler hat man immer zuerst nachgefragt, was überhaupt lieferbar ist.

    TI war z.B. Spezialist im Herstellen von ICs für Grosskunden, welche dann auch frei verkauft wurden. Allerdings wurde der Chip dann nicht mehr produziert, wenn der Grosskunde die Fabrikation eingestellt hat.
    Intel war etwas mühsam mit den Handbüchern. Man hat ein Handbuch bestellt und dann stand vorne drin, welche man noch alle zusätzlich braucht Also zweite Bestellung machen. Mit der dritten Bestellung hatte man dann meist alles nötige zusammen. Das dauerte dann schnell mal 2-3 Wochen.

    Allerdings war damals alles noch übersichtlicher. Bei maximal 64KB Speicherbereich, kannte man seine Bits noch persönlich.

    1976 war die Hobby-Scene noch sehr klein und ie meisten hatten beruflich mit Computern zu tun. Die meisten hatten auch nicht einmal einen Computer um die Software zu entwickeln. Das wurde damals noch von Hand assembliert und als Hex-Code eingetippt (z.B. KIM-1).
    Ein KIM-1 kostet um die CHF 750.- und war ein Schnäppchen. Ein 6502, 1 KB RAM, ein Monitor-Programm, ein paar Timer und 16-Bit I/Os, eine 6-Stellige 7-Seg Anzeige für Adresse und Daten, sowie eine Hex-Tastatur. Wer es sich leisten konnte, konnte auch einen Fernschreiber als Terminal anschliessen.

    Der Apple ][ wurde erst 1977 entwickelt und der IBM-PC kam 1981 auf den Markt.

    Die heutige Technologie und ihre Verbreitung hat erst vor 30-40 Jahren angefangen. Den µP, also eine ganze CPU auf einem Chip, gibt es erst seit 1972. Allerdings war das ursprünglich eine Fehlentwicklung. Bull wollte von Intel einen Chipsatz für ein Terminal. Bei Intel kam man dann auf die Die etwas programmierbares zu machen und entwickelte den 4004, ein 4-Bit Prozessor. Bull war dann aber das Terminal zu langsam und sie wollten die Entwicklung nicht... Also musste Intel den Flop selber vermarkten um die Entwicklungskosten wieder einzuspielen.

    MfG Peter(TOO)

    - - - Aktualisiert - - -

    Zitat Zitat von Ceos Beitrag anzeigen
    damals gabs ja auch noch net soooo komplexe chips, da war 386er PC in Mode
    Zum 80386 selbst, gab es zwei Handbücher von Intel, jeweils 500-1000 Seiten stark. eines behandelte nur die Hardware und das Zweite nur den Befehlssatz.
    Dann gab es noch ein paar zur Programmierung in Assembler und App-Notes.
    Neu beim 80386 war, dass die FPU mit auf dem Chip war. Beim 8086 war die FPU (80387) komplexer als die CPU und entsprechend teuer (so Mitte 80er 500-600 CHF).

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  8. #28
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473

    Timer 2 - Interrupt

    Da ich hier bisher viel gute Hilfe bekommen habe, meldi ch mich mal wieder.

    Ich will mit dem Timer2 einen Interrupt generieren, komme aber mit den Registern irgendwie nicht klar.

    Was ich dem Reference-Manual
    http://www.st.com/content/ccc/resour...DM00135183.pdf
    bisher entnehmen konnte war:
    • Autoreload-Register (ARR), enthält den Wert mit dem das Zählregister jedesmal wieder neu geladen wird
    • Prescaler (PSC), Vorteiler
    • Counter-Register (CNT), Zählregister des Timers
    • Controllregister 1/2 (CR1, CR2), verschiedene Einstellungen


    Ich finde zwar die entsprechenden Register- und Bitbezeichnungen in der Headerdatei, aber nur für allgemein für alle Timer. Ich finde keine Definition, wie ich die Register für Timer2 beschreiben kann. Auch wie ich eine Funktion per Interrupt aufrufe ist mir noch nicht ganz klar. Dieses Konstrukt
    Code:
    extern "C" void TIM2_IRQHandler(){
    }
    hab ich so noch nie genutzt. Wie funktioniert das?

  9. #29
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Wenn du mit den Registern ein Interrupt-Betrieb für Timer2 konfigurierst, wird die Funktion mit dem Namen TIM2_IRQHANDLER 'automatisch' aufgerufen. Also einfach eine Funktion so definieren:
    Code:
    void TIM2_IRQHandler() {
      // mach was... 
    }
    Ausschnitte aus nem alten Projekt von mir mit nem STM32F107:
    Code:
    // ...
    #include  <stm32f10x.h>     // sfr nach keil 
    #include  "STM32F107_rcc.h"   // strukturen der sfr 
    #include  "STM32F107_gpio.h"   // strukturen der sfr 
    #include  "STM32F107_tim.h"   // strukturen der sfr 
    int main() {
      //...
    
     // Timer 2 für Zeitmessung 
       
      #define VORTEILER_TIM2   ((SystemCoreClock / 10000)-1)   // Teilung auf 10 kHz 
      #define TIM2_PRIO     0x10             // höchste Priorität 
      #define TIM2_INTERV    1              // 1ms 
      #define VORLADEWERT_TIM2   (TIM2_INTERV*10 - 1)   
     
      RCCst->APB1ENR.tim2 = 1;   // Takt für Timer 2 freigeben 
      TIM2st->DIER.uie    = 1;   // Freigabe: Überlauf von Zähler löst Interrupt aus 
      TIM2st->CR1.dir     = 1;   // Zähler zählt runter 
      TIM2st->PSC         = VORTEILER_TIM2; 
      TIM2st->ARR         = VORLADEWERT_TIM2; 
      TIM2st->CNT         = VORLADEWERT_TIM2; 
      TIM2st->CR1.cen     = 0;   // Timer 2 Zählfreigabe 
      NVIC->IP[2]         = TIM2_PRIO;  // Priorität  
         
      NVIC->ISER[TIM2_IRQn / 32] = 1 <<(TIM2_IRQn % 32); // ISR für Zeitmessung setzen 
      // ...
    }
    void TIM2_IRQHandler(void)        // wird jede ms aufgerufen  
    { 
      TIM2st->SR.uif = 0; 
      zaehler_ms++; 
    }
    Geändert von Sisor (02.07.2016 um 16:31 Uhr)

  10. #30
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473
    Hm...die Bibliothek , die ES nutzt, scheint da etwas anders mit Interrupts umzugehen. TIM2_IRQHandler ist da nur ne stinknormale Funktion.

    Hier ist mal der Code, den ich bisher gebastelt habe.
    Code:
    void TIM2_IRQHandler(void){
      printf("TIM2 Interrupt\n");
    }
    
    void configTakt(){
      RCC->CFGR |= RCC_CFGR_PPRE1_DIV16;        //Takt für APB1 auf 1MHz runterteilen
    }
    
    void configTimer2(){
      RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;       //Takt für Tim2 freigeben
      TIM2->PSC = 10000;                        //Prescaler 10.000
      TIM2->CR1 |= TIM_CR1_CEN;                 //Timer aktivieren
    }
    
    void main(void){
      configTakt();
      configTimer2();
      configLed();
      configButton();
      printf("Einstellung fertig\n");
    
      while(1){
      }
    }

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

  1. Syntax-Frage -> writeString(char *string)
    Von Furzgas im Forum Robby RP6
    Antworten: 13
    Letzter Beitrag: 31.12.2009, 09:06
  2. Frage zum Ansteuern von Ports/Programmierfrage
    Von Geimel im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 26.01.2007, 23:29
  3. Kurze Syntax Frage
    Von Brantiko im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 18.01.2007, 19:58
  4. Frage zum Programmieren der Ports
    Von Geimel im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 07.08.2006, 20:29
  5. kleine Frage zur Syntax
    Von freddy0815 im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 07.02.2005, 15:19

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests