- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 11

Thema: Spannung regeln mit ADuc7026

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hi,

    Für dein Problem gibt es mehrere Ansätzen. Entweder es gibt ein Hardwaremodul, welches die Aufgabe übernehmen kann oder aber du musst die Erfassung des Tastverhätnisses vollständig in Software oder in Kombination mit einem Hardware-Modul ausführen.
    Dafür gilt es natürlich erstmal das Datenblatt zu überprüfen: http://www.analog.com/media/en/techn...6_27_28_29.pdf
    Dort kannst du auch ermitteln, was die jeweiligen Bezeichnungen für den Pin bedeuten und ob das für deine Anwendung hilfreich ist. Letztendlich musst du den Weg zu deiner Lösung in deiner Arbeit sicherlich dokumentieren.
    Für weitere Fragen stehe ich gerne zur Verfügung
    Gruß Jannis

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    22.03.2014
    Beiträge
    5
    Jannis, ich danke dir erstmal.

    Also ich bin derzeit etwas weiter gekommen, eventuell könntest du mir bei meinen weiteren Hindernissen helfen.

    Den Port Pin 2.0 werde ich als GPIO nutzen. Damit wäre klar, das ich mit den entsprechenden Registern den Port Pin 2.0 als Input und als GPIO konfigurieren muss.

    Im nächsten Schritt geht es dann darum, den Tastgrad des PWM Signals (133 Hz) zu ermitteln, den ich an diesen Pin bekomme.
    Dazu würde ich einen Timer nutzen (in diesem Fall den Timer1 (General Purpose Timer) des uC), um die Zeiten (Binär) zu ermitteln, in denen das Signal High und Low ist um daraus den Tastgrad bestimmen zu können.
    Also will ich rein softwaretechnisch bestimmen, welchen Tastgrad ich habe.

    Ich muss wohl in diesem Zusammenhang auch Interrupts nutzen. Also gleich 2 Dinge (Timer & Interrupt), wo ich nicht weiß wie ich vorgehen muss, damit es funktioniert. Hier könnte ich eben Hilfe gebrauchen.
    Es kommen keine externen Interrupts in Frage, weil diese an diesem Port Pin nicht erfasst werden können.

    Mein Timer 1 gibt mir folgende Möglichkeiten zur Konfiguration:
    1: Teiler (Prescale) für die Quelltaktgeschwindigkeit
    2: Das Format des Ergebnisses (Binär, h:min:sec)
    3: Arbeiten im periodischen Modus
    4: Ein und Ausschalten des Timer1
    5: Einstellung zum hoch oder runterzählen
    6: Die Quelle für die Taktgeschwindigkeit

    Dann gibt es noch diese beiden Einstellungen, wo ich nicht weiß, ob die für mein Vorhaben von Interesse sein könnten:

    7: Event select bit. Set by user to enable time capture of an event. Cleared by user to disable time capture of an event.
    8: Event select range, 0 to 31. These events are as described in Table 160. All events are offset by two


    Die Einstellungen sind nicht das Problem (bis auf 7 und 8, die ich erstmal disabled lasse). Auch das auslesen des aktuellen Werts ist über den entsprechenden Register kein Problem.
    Anhand von Tutorials zu ganz anderen Mikrocontrollern versuche ich zu verstehen, wie ich das auf meinen uC und meine Problemstellung übertragen kann.

    Also ich habe zu Beginn einfach den Register für die Interrupts genommen und dort eingestellt auf welchen Timer mein Interrupt Handler reagieren soll.

    (GP_TIMER_BIT = 0x8

    IRQEN = GP_TIMER_BIT;

    Mein Interrupt Handler sieht wie folgt aus:

    void IRQ_Handler (void) __irq
    {

    if (IRQSIG & GP_TIMER_BIT) // Interrupt über Timer 1 GB_Timer_Bit
    {
    ....
    ....
    T1CLRI = 1; // Timer1 interrupt löschen
    }
    }
    An der Stelle habe ich Fragen:

    a) War es das, damit ich meinen Timer nutzen kann oder muss da noch was beachtet werden?
    b) Wie nutze ich das ganze jetzt bzw. wie gelange ich vom normalen Programmablauf (main) in den Interrupt?

    Zu b: Ich verstehe nicht wie man bei einem Timer interrupt in das interrupt gelangt. Bei einem externen interrupt würde ich sagen, es gelangt in den interrupt, sobald am Eingang ein High Signal ansteht, doch bei dem Timer interrupt begreife ich das nicht.

    Danke

  3. #3
    Das klingt doch von der Herangehensweise schon mal sehr gut. Deine Einschätzung zu der Verwendung von Interrupts und des nicht Vorhandenseins eines Pin-Interruptes stimme ich zu.
    Wie du nun selber gesagt hast, gibt es am dem Pin keinen Interrupt. Auch das PLA (siehe Datenblatt) scheidet aus, da P2.0 da nur aus Ausgang vorgesehen ist. Ergo muss da ein anderer Weg gefunden werden, die Pegelveränderung am Pin mitzubekommen. Hier kommt der Timer ins Spiel.
    Wie der Timer konfiguriert werden muss, ergibt sich aus der Anwendug des Timers. Aber soweit ist das Konzept ja noch nicht, das wird aber, der Weg ist richtig.

    Wie kommt man in den Interrupt?
    Deine Beschreibung zum Pin ist natürlich absolut korrekt. Beim Timer ist der Sachverhalt zwar etwas komplexer aber an sich analog dazu. Der Timer ist nichts anderes, als ein Zähler, der ein Ende hat (2^16=65535). Ist dieser Punkt erreicht, läuft der Timer über und es wird ein Interrupt erzeugt, sofern dieser aktiviert ist.
    Allgemein ist so, dass die Interrupts von der Hardware generiert werden und dann in den entsprechenden Handler gesprungen wird.

    Hilft dir das insbesondere zu b) weiter?

    Gruß Jannis

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    22.03.2014
    Beiträge
    5
    Zitat Zitat von durchgebrannt Beitrag anzeigen
    Wie kommt man in den Interrupt?
    Deine Beschreibung zum Pin ist natürlich absolut korrekt. Beim Timer ist der Sachverhalt zwar etwas komplexer aber an sich analog dazu. Der Timer ist nichts anderes, als ein Zähler, der ein Ende hat (2^16=65535). Ist dieser Punkt erreicht, läuft der Timer über und es wird ein Interrupt erzeugt, sofern dieser aktiviert ist.
    Allgemein ist so, dass die Interrupts von der Hardware generiert werden und dann in den entsprechenden Handler gesprungen wird.

    Hilft dir das insbesondere zu b) weiter?

    Gruß Jannis
    Das verwirrt mich etwas ;D. Im Grunde gesehen muss ich doch eine if-Abfrage machen und nach dem Zustand des Ports fragen. Wenn dieser den Zustand ändert, muss ich den Zählerstand auf Null setzen, bei der nächsten Zustandsänderung muss ich den Zählerstand speichern, bei erneuter Änderung des Eingangs erneut Zählerstand speichern (eine Periode durchlaufen) und zurück setzen, damit ich die nächste Periode erfassen kann.

    In diesem Fall würde ich doch nie ein Interrupt auslösen, wenn dieser nur bei Überlauf ausgelöst wird, da es sehr wahrscheinlich nicht so hoch zählen wird? Oder irre ich mich da?

    Ich meine ein Interrupt wird mir in diesem Fall nichts bringen. Ich will ja den Zählerstand immer bei Zustandsänderung ermitteln und bei Ende der Periode wieder zurück setzen.
    Ist meine Herangehensweise falsch? Müsste ich das anders lösen?

  5. #5
    Bei dem von dir vorgeschlagenen Verfahren, das sicher funktionieren würde, gibt es einen Haken.
    Pollst (dauerhaftes immer sich wiederholende Abfrage) auf den Pegel des Pins, hast du keine Prozessortakte mehr frei, um noch das CAN unterzubringen oder andere Aufgaben zu erledigen. Jetzt könnte man die Abfrage natürlich auch in eine große Schleife mit rein tun, die dann die anderen Aufgaben mit abarbeitet, dann ist aber der Zeitpunkt, wann der Pin überprüft wird, nicht mehr eindeutig.

    ----> in dieser Anwendung taugt das Konzept nicht.
    Anhaltspunkte, was dein Konzept können sollte:
    -Timerfunktion kommt drin vor
    -Der Überlaufinterrupt kommt drin vor
    -Die ISR(Interrupt Service Routine) enthält kein Polling

    Gruß Jannis

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    74
    Beiträge
    11.077
    Hallo!

    Das muss ich zustimmen, weil das einzige was paralell läuft, sind Timer und CPU. Paralelles Laufen von mehreren Tasks ist nur auf CPUs mit mehreren Kernen möglich. Sonst muss man Prioritäten setzen und in CPU alles nacheinander verarbeiten.

    Ich würde empfehlen vor echten Projekten mit einfachen 8- bzw. 16-bittigen µC die Grundlagen der Programmierung üben, weil mit 32-bittigen µCs es schweriger zu anfangen ist ._.
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  7. #7
    Der µC hat durchaus viele Module zu bieten, wie das PLA(Programmable Logic Array),die sind nur alle an dem Pin (P2.0) nicht verfügbar. Dem Designer des Boards könnte man in mancher Hinsicht gerne mal die Hand geben. Kein Capture-Mode möglich, PLA nicht einsetzbar, kein externer Interrupt auf dem Pin, das macht es nicht leichter
    Dazu stand der Chip nicht zur Auswahl, was das nicht unbedingt leichter macht^^. An sich ist ein 32-Bitter nicht anders als ein 8-Bitter, man muss nur deutlich genauer lesen, um nicht von der Menge an Möglichkeiten erschlagen zu werden.

    Gruß Jannis

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 29.06.2012, 17:20
  2. Mit PWM Spannung regeln von 0V bis 15V
    Von Ferdinand im Forum Elektronik
    Antworten: 12
    Letzter Beitrag: 03.12.2009, 07:54
  3. Antworten: 11
    Letzter Beitrag: 01.12.2008, 21:25
  4. Kleine Spannung nach oben regeln...
    Von rIdd3r im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 14.03.2007, 08:20
  5. Antworten: 13
    Letzter Beitrag: 01.02.2007, 09:34

Stichworte

Berechtigungen

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

Labornetzteil AliExpress