-         

+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Anfnger hat Technisches Problem (Verstndnis) mit PWM Prog.

  1. #1
    Neuer Benutzer fters hier
    Registriert seit
    03.11.2006
    Ort
    Coburg
    Alter
    33
    Beitrge
    7

    Anfnger hat Technisches Problem (Verstndnis) mit PWM Prog.

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Wnsche einen guten Abend!
    Bin Anfnger I/O setzen, warteschleifen und einfache Programmablufe 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 strzen will hab ich im Internet Progamme gesucht um das Gesamtbild besser vertehen zu knnen.
    Mir ist nicht klar wir im nachfolgendem Programm Register 22 mit TCNT0
    verbunden ist, bzw. es wird r22 incrementiert und TCNT0 erhht seinen wert. Hab schon smtliche Bcher und Datenbltter durchforstet und nichts gefunden was die beiden in zusammenhang bringen wrde.

    .include "m16def.inc" ; Definitionen fr 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

    whre Dankbar wenn einer die 5W Birne in meinem Kopf auf 5,1W erhhen knnte.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    31.12.2006
    Beitrge
    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
    33
    Beitrge
    7
    Zur Erklrung:
    Ich Arbeite mit dem Programm AVR Studio 4 wo ich die Mglichkeit habe mir Schritt fr Schritt anzuschauen.

    Der Abschnitt des Programmes der gleich nachfolgt luft 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
    30
    Beitrge
    4.255
    Und was ist daran so schlimm? Der Timer luft ber, und weils so konfiguriert wurde, wird ein Interrupt ausgelst. 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 weitergezhlt, whrend TCNT0 vom Hardware-Timer unabhngig vom restlichen Programmablauf weitergesetzt wird.

  5. #5
    Neuer Benutzer fters hier
    Registriert seit
    03.11.2006
    Ort
    Coburg
    Alter
    33
    Beitrge
    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 erhht?

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

  7. #7
    Neuer Benutzer fters hier
    Registriert seit
    03.11.2006
    Ort
    Coburg
    Alter
    33
    Beitrge
    7
    da geb ich dir vllig recht uwegw. Aber mein Problem ist das logische Verstndniss das ein "r22 incrementiert wirt" und TCNT0 erhht wirt.
    Wie das Programm abluft versteh ich ( glaub ich ).

    Aber wo ist die logik bei "inc r22" und die erhhung von TCNT0???
    Wo hngt es irgentwo zusammen???
    und der zusammenhang muss bestehen, sonst wrd das Programm nicht
    funktionieren.

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

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    31.12.2006
    Beitrge
    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 hochgezhlt. Das sind zwei verschiedene Paar Schuhe (Zhler ).

  9. #9
    Neuer Benutzer fters hier
    Registriert seit
    03.11.2006
    Ort
    Coburg
    Alter
    33
    Beitrge
    7
    An cipoint.

    Das Programm lsst den Atmega16 eigentlch nur ein unvernderbares
    PWM Signal ausgeben das den Servo auf ein und der selben Stelle hlt.

  10. #10
    Neuer Benutzer fters hier
    Registriert seit
    03.11.2006
    Ort
    Coburg
    Alter
    33
    Beitrge
    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 schn Weiterarbeitet und der Timer immer schn seine Tackte bekommt.
    Richtig?


    Oder Denk ich jetzt in eine vllig falsche richtung?

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhnge hochladen: Nein
  • Beitrge bearbeiten: Nein
  •