- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Anfänger hat Technisches Problem (Verständnis) mit PWM Prog.

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2006
    Ort
    Coburg
    Alter
    40
    Beiträge
    7

    Anfänger hat Technisches Problem (Verständnis) mit PWM Prog.

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Wünsche einen guten Abend!
    Bin Anfänger I/O setzen, warteschleifen und einfache Programmabläufe gehen
    langsam immer besser. ( vorkentnisse: 7 Jahre Maschinenbau als Energie-Anlagenelektroniker )
    Ich versuche mich mit Assembler bekannt zu machen weil ich mir gedacht hab
    wenn schon Strauss dann Johann Strauss!

    Hab folgendes Porblem:
    Da ich mich jetzt auf das ansteuern von Servos stürzen will hab ich im Internet Progamme gesucht um das Gesamtbild besser vertehen zu können.
    Mir ist nicht klar wir im nachfolgendem Programm Register 22 mit TCNT0
    verbunden ist, bzw. es wird r22 incrementiert und TCNT0 erhöht seinen wert. Hab schon sämtliche Bücher und Datenblätter durchforstet und nichts gefunden was die beiden in zusammenhang bringen würde.

    .include "m16def.inc" ; Definitionen für Atmel ATmega8

    .def cnt1 = r20 ;count1
    .def temp = r21

    ;################################################# ############################;

    .org 0x000
    rjmp INIT ; Reset Handler

    .org OVF0addr
    rjmp Timer0 ; Timer0 Overflow Handler

    ;################################################# ############################;

    .equ frequenz = 7372800 ; Frequenz in Hz
    .equ start= 206
    ;################################################# ############################;

    INIT:

    ldi temp, LOW(RAMEND)
    out SPL, temp
    ldi temp, HIGH(RAMEND)
    out SPH, temp

    ldi temp, 0b11111111
    out DDRD, temp ; Port B -> Ausgang
    ldi temp, 0b00000000
    out PORTD, temp


    ldi temp, 0b00000001 ; Timer0 Interrupt aktivieren
    out TIMSK, temp


    ldi temp, start ; Startwert des Timers
    out TCNT0, temp

    ldi temp, 0b00000010 ; Prescaler auf 8
    out TCCR0, temp

    sei ; Interrupts aktivieren

    ldi cnt1, 0
    rjmp MAIN

    ;################################################# ############################;

    MAIN:
    sbic PINA,0

    inc r22
    rjmp MAIN



    ;################################################# ############################;

    Timer0:

    comp1: ldi temp,1
    cpse cnt1,temp
    rjmp comp2
    sbi portd,0

    comp2: ldi temp, 10
    cpse cnt1,temp
    rjmp comp3
    cbi portd,0

    comp3: ldi temp,210
    cpse cnt1,temp
    rjmp restart
    ldi cnt1,0

    restart:
    ldi temp, start
    out TCNT0, temp
    inc cnt1
    reti

    währe Dankbar wenn einer die 5W Birne in meinem Kopf auf 5,1W erhöhen könnte.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    31.12.2006
    Beiträge
    61
    Was soll das Programm denn machen? R22 hat gar keine Bedeutung im Programm.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2006
    Ort
    Coburg
    Alter
    40
    Beiträge
    7
    Zur Erklärung:
    Ich Arbeite mit dem Programm AVR Studio 4 wo ich die Möglichkeit habe mir Schritt für Schritt anzuschauen.

    Der Abschnitt des Programmes der gleich nachfolgt läuft solange im kreis bis im TCNT0 ein overflow stattfindet ( 255+1 ).

    MAIN:
    sbic PINA,0

    inc r22
    rjmp MAIN

    Wenn es Stattfindet springt der Programmablauf auf:

    .org OVF0addr
    rjmp Timer0 ; Timer0 Overflow Handler

    Und weiter auf das Label "Timer0"

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    4.255
    Und was ist daran so schlimm? Der Timer läuft über, und weils so konfiguriert wurde, wird ein Interrupt ausgelöst. Daher erfolgt der Sprung zu OVF0addr und von dort in die Interruptroutine ab Timer0.

    Oder was ist jetzt genau dein Problem?


    TCNT0 und r22 haben nixhts miteinander zu tun. r22 wird in der main-Schleife weitergezählt, während TCNT0 vom Hardware-Timer unabhängig vom restlichen Programmablauf weitergesetzt wird.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2006
    Ort
    Coburg
    Alter
    40
    Beiträge
    7
    OK. Ich muss mich Entschuldigen da meine Erste Antwort keine wirkliche
    Antwort war. ( meine Schuld )

    Du hast Recht.

    Ich hab noch mal nachgeschaut was mit R22 im Programm passiert und hab festgestellt dass nichts passiert!
    aber warum wird ein inc "r22" geschrieben und TCNT0 wird erhöht?

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    4.255
    ich habs grad per edit nachgeschoben: TCNT0 wird vom Timer beeinflusst [und zwar alle 1,085 µsec. un 1 erhöht] (siehe Datenblatt!). r22 wird anscheinend nicht weiter genutzt.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2006
    Ort
    Coburg
    Alter
    40
    Beiträge
    7
    da geb ich dir völlig recht uwegw. Aber mein Problem ist das logische Verständniss das ein "r22 incrementiert wirt" und TCNT0 erhöht wirt.
    Wie das Programm abläuft versteh ich ( glaub ich ).

    Aber wo ist die logik bei "inc r22" und die erhöhung von TCNT0???
    Wo hängt es irgentwo zusammen???
    und der zusammenhang muss bestehen, sonst würd das Programm nicht
    funktionieren.

    es tut mir leid das ich als Anfänger solche Fragen stelle, aber wenn ich Privat
    was Lernen will dann gescheit.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    31.12.2006
    Beiträge
    61
    Statt inc R22 kannst du auch dec R22 schreiben. Dann wird der R22 bei jedem Durchlauf um 1 erniedrigt. Aber der TCNT0 wird trotzdem hochgezählt. Das sind zwei verschiedene Paar Schuhe (Zähler ).

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2006
    Ort
    Coburg
    Alter
    40
    Beiträge
    7
    An cipoint.

    Das Programm lässt den Atmega16 eigentlch nur ein unveränderbares
    PWM Signal ausgeben das den Servo auf ein und der selben Stelle hält.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2006
    Ort
    Coburg
    Alter
    40
    Beiträge
    7
    Ahhhhhh!!! durch die antwort von cipoint
    Wenn ich jetzt auf dem Donnerbalken die Richtige Eingebung hatte wird mit inc r22 der Atmega nur auf trap gehalten damit die CPU immer schön Weiterarbeitet und der Timer immer schön seine Tackte bekommt.
    Richtig?


    Oder Denk ich jetzt in eine völlig falsche richtung?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test