-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Tiny13(A), PWM, $crystal: Komisches Verhalten

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    30.07.2012
    Beiträge
    19

    Tiny13(A), PWM, $crystal: Komisches Verhalten

    Anzeige

    Hallo ihr Lieben,

    ich bin gerade auf ein merkwürdiges Verhalten gestossen, welches ich mir nicht erklären kann. Da hatte ich in der Vergangenheit noch nie drauf geachtet, weil ich noch nie versucht hatte, den PWM- Takt zu erhöhen ...

    Quelltext für den Test zum Nachvollziehen:
    Code:
    $crystal = 4000000
    Config Pinb.0 = Output
    
    Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 1
    Start Timer0
    Dim Z As Byte : Dim T As Bit
    Z = 0 : T = 0
    
    Do
       If T = 0 Then
          Incr Z
          If Z = 127 Then T = 1
       Else
          Decr Z
          If Z = 0 Then T = 0
       End If
       Waitms 1
       Pwm0a = Z
    Loop
    Verwendete Werte für den Takt: 1MHz, 8MHz, 10MHz, 20MHz

    Unabhängig vom Takt erhalte ich am Ausgang immer etwa 2,2kHz. Ändere ich aber den Takt, ändert sich auch die Geschwindigkeit des Rauf- und Runterlaufens, und das nicht wie erwartet schneller werdend bei höherem Systemtakt, sondern mir unverständlich langsamer werdend! Der Systemtakt beeinflusst also nicht den PWM, wohl aber die schnöde Zählschleife, und das annährend unerwartet umgekehrt proportional?!?

    Also... Nutze ich einen Systemtakt von 1MHz, dann dauert ein Zyklus (Do ... Loop) etwa 1/5 Sekunde. Setze ich den Takt auf 20MHz, dann dauert ein Zyklus etwa 4 Sekunden, bei 10MHz etwa 1,5 Sekunden ...

    Hmmmm...
    Mache ich da irgend wie einen doofen Denkfehler? Hab ich'n Knoten im Hirn? Kapier ich nicht *grummel*


    Könnte mir mal bitte wer freundlicher Weise auf die Sprünge helfen?


    BTW: Gibt es eine Möglichkeit, den Ausgangstakt des PWM zu erhöhen, also auf z.B. umzu 10kHz? Ich benötige letztlich nur ein Hochlaufen von 0-50% Puls/Pause (und wieder zurück; Dimmen eines EL- Converters)

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Zitat Zitat von M_I_B Beitrag anzeigen
    Hmmmm...
    Mache ich da irgend wie einen doofen Denkfehler? Hab ich'n Knoten im Hirn? Kapier ich nicht *grummel*


    Hi, der Systemtakt des Tiny ist nicht von der $CRYSTAL Einstellung abhängig, sondern von den Fuseeinstellungen bzw eventuell vorandenem Quarz.

    Die $CRYSTAL Einstellung benutzt Bascom um den entsprechenden Maschinencode für zB WAITMS zu erstellen. Setzt Du die Einstellung hoch, macht Bascom mehr Schleifen daraus; höherer Takt - mehr Schleifen um auf die gleiche Wartezeit (zB 1ms) wie bei niedrigem Takt zu kommen. Der tatsächliche Takt hat sich aber nicht geändert, bedeutet, die vielen Schleifen brauchen länger und somit wird dein Zyklus länger.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    2,2 KHz kommt auch gut hin: Der ATTiny13A läuft werksseitig mit 9,6 MHz und einem Takt-Vorteiler von 8, also auf 1,2 MHz. Teilt man das durch 512 (256 Takte raufzählen und 256 runter), kommt man auf präzise 2343 Hz.

    Wenn Du das Fusebit CKDIV8 löschst, fällt die Vorteilung durch 8 weg, und dann bist Du schon bei 18,7 kHz.
    Weißt Du, wie man Fusebits verstellt?

    Und wie ja schon gesagt wurde: Die $Crystal-Anweisung beeinflusst den Takt NICHT! Wenn die Frequenzangabe dort aber vom tatsächlichen Takt abweicht, sind die Pausen bei wait-Befehlen auch fehlerhaft!

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    30.07.2012
    Beiträge
    19
    ... au mann *VorDieStirnPatsch* ^^

    Na klar, ihr habt ja vollkommen wahr! Manchmal sieht man halt den Wald vor lauter Bäumen nicht...

    Ok, mal davon abgesehen, das so was natürlich doof ist, das Bascom nicht gleich den echten Takt über die Fuses setzt resp. umgekehrt aus den Fuses bezieht, ist die Einstellung in Bascom auch etwas eingeschränkt. Denn über den Progger kommt man nicht über 9,6MHz. Vermutlich muss man dort dann direkt das Register ändern; muss ich mal suchen, wie das denn geht ...

    Nachtrag:
    Das ist natürlich eine ziemliche Frickelei, wenn man versuchen muss, in etwa die Resonanzfrequenz des Wandlers zu treffen. Gibt es da nicht irgend ein Hilfsmittel / Trick 17, um mal z.B. gleitend die Taktfrequenzen durchzugehen?

    Quatsch mit Sosse Kann der ja gar nicht intern... Thema durch... Muss ich die Resonanzfrequens eben am Übertrager anpassen...
    Geändert von M_I_B (16.09.2012 um 17:39 Uhr)

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Über 9,6Mhz kannst du nicht kommen bzw. wenn du den Controller schneller betreibst kann es passieren das der Controller nicht richtig arbeitet.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    30.07.2012
    Beiträge
    19
    ... das bezieht sich aber nur auf intern generierten Takt, oder? Denn lt. Datenblatt schafft der 13er 20MHz ...

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Genau.
    Intern kann er nur 9,6MHz erzeugen. Die 20MHz musst du extern erzeugen und du kannst sie auch nur dann verwenden wenn du den Controller mit mind. 4,5V betreibst.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    30.07.2012
    Beiträge
    19
    ... ok, danke euch erstmal für die Hinweise.

    Ich habe jetzt mal geschaut, was wo bei rauskommt:
    Vorteiler immer aus. Bei 9,6 MHz komme ich auf umzu 17,5 kHz, bei 4,8 MHz umzu 9,2 kHz. Da sollte sich mit ein paar C's am Übertrager irgendwo eine Resonanz auf der Grundwelle oder einer der Oberwellen finden lassen.
    Ich werde den ganzen Trum mal zusammenstecken und schauen, ob ich da was wuppen kann ... Ich werde berichten ... Hat zwar nicht direkt was mit Robotik zu tun, wohl aber mit RC ...

  9. #9
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Zitat Zitat von M_I_B Beitrag anzeigen
    ... ok, danke euch erstmal für die Hinweise.

    Ich habe jetzt mal geschaut, was wo bei rauskommt:
    Vorteiler immer aus. Bei 9,6 MHz komme ich auf umzu 17,5 kHz, bei 4,8 MHz umzu 9,2 kHz. Da sollte sich mit ein paar C's am Übertrager irgendwo eine Resonanz auf der Grundwelle oder einer der Oberwellen finden lassen.
    Ich werde den ganzen Trum mal zusammenstecken und schauen, ob ich da was wuppen kann ... Ich werde berichten ... Hat zwar nicht direkt was mit Robotik zu tun, wohl aber mit RC ...
    Wer sagt den das es immer direkt was mit Robotik zu tun haben muss
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    30.07.2012
    Beiträge
    19

    Rotes Gesicht

    ... niemand sacht das, aber ich bin schon so lange in Foren unterwegs (da gab es das WWW noch gar nicht), das ich da vorsichtig geworden bin

    Sodele... Software ist fertig und tut, was sie soll. Anbei der Quellcode zur allgemeinen Verwendung, falls es wer braucht.

    PB0 befeuert direkt einen kleinen FET (3A- Typ aus der Grabbelkiste), der wiederum einen 1:10 Übertrager mit umzu 6V befeuert, der wiederum auf der Sekundärseite eine EL- Folie zum leuchten bringt.
    Der Teil ist erst im Kopf fertig und wird wohl morgen zusammen gesteckt.

    PB1 kümmert sich um Änderungen bei Druck auf das Wählrad, PB2 und PB3 um Statusänderungen beim Drehen des Rades... Welches Rad fragt ihr? Wählrad RC Sender Spektrum DX- Serie... Und nu ist wohl auch klar, das ich nicht nur schnöde das Display beleuchten möchte, sondern das auch schön haben will

    Code:
    $regfile = "attiny13.dat"
    $crystal = 4800000
    
    '$prog &HFF , &H72 , &HFF , &H00                                                 ' 9,6 MHz, Vorteiler aus
    $prog &HFF , &H75 , &HFF , &H00                                                 ' 4,8 MHz, Vorteiler aus
    
    Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 1                 'PWM im Schnellgang
    
    Dim Z As Byte , T As Bit , L As Byte                                            ' Z= Zähler P-Breite, T= dunkel/hell, PWM Startwert
    Dim M As Bit , N As Bit , W As Byte , D As Byte                                 ' Merker für Rollen Eingänge, Geschwindigkeit Dimmer, AN- Zeit
    L = 8 : W = 10 : D = 10                                                         ' Vorbelegen
    
    Config Pinb.0 = Output                                                          ' PWM Ausgabe
    Config Pinb.1 = Input                                                           ' INT0 Eingang (Klicktaste)
    Config Pinb.2 = Input                                                           ' Eingang Rollen links
    Config Pinb.3 = Input                                                           ' Eingang rollen rechts
    Portb.1 = 1                                                                     ' Pullup einschalten
    Portb.2 = 1                                                                     ' Pullup einschalten
    Portb.3 = 1                                                                     ' Pullup einschalten
    
    On Int0 Isr_display                                                             ' Sprungziel bei Auslöung
    Config Int0 = Change                                                            ' Jeden Pegelwechsel nutzen
    Enable Int0                                                                     ' INT0 einschalten
    
    Gosub Isr_display                                                               ' Erstmal beim EInschalten Licht machen
    
    Do                                                                              ' Start Hauptschleife
       While T = 1                                                                  ' Licht ist an, also Ausdimmen
          Decr Z
          Pwm0a = Z
          If Z = L Then T = 0                                                       ' Ende, wenn Startwert erreicht
          Waitms W                                                                  ' Geschindigkeit des Dimmens
       Wend
    
       If Pinb.2 = M Then                                                           ' Start Abfrage der Rollen- Eingänge
          M = 1 : Gosub Isr_display                                                 ' und Sprung, wenn sich was geändert hat
       End If
       If Pinb.2 = M Then
          M = 0 : Gosub Isr_display
       End If
       If Pinb.3 = N Then
          N = 1 : Gosub Isr_display
       End If
       If Pinb.3 = N Then
          N = 0 : Gosub Isr_display
       End If                                                                       ' Fertig mit der Auswertung
    Loop
    
    
    Isr_display:                                                                    ' INT- und Sprungziel
       Disable Int0                                                                 ' Erstmal für Ruhe sorgen
       While T = 0
          Incr Z
          Pwm0a = Z
          If Z = 128 Then T = 1                                                     ' Bis 50% Puls/Pause hochzählen
          Waitms W
       Wend
    
       Wait D                                                                       ' Display für D Sekunden an lassen
    
       Enable Int0                                                                  ' Ab jetzt wieder horchen
    Return                                                                          ' und zurück zum Hauptprogramm
    
    
    End

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. RP6-Wetterstation komisches Verhalten
    Von Virus im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 5
    Letzter Beitrag: 03.01.2010, 12:35
  2. komisches Verhalten einer Schaltung
    Von Arduino99 im Forum Elektronik
    Antworten: 14
    Letzter Beitrag: 24.12.2009, 16:13
  3. Antworten: 18
    Letzter Beitrag: 06.06.2007, 09:22
  4. Komisches AVR Verhalten...
    Von EDatabaseError im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 21.02.2007, 20:44
  5. Komisches verhalten meiner CC1
    Von d4rkwolf im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 01.03.2005, 21:58

Stichworte

Berechtigungen

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