- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 42

Thema: Einfache Blinkschaltung für ATTiny13

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.08.2005
    Ort
    Schleswig-Holstein
    Alter
    36
    Beiträge
    41

    Einfache Blinkschaltung für ATTiny13

    Anzeige

    E-Bike
    Ich brauche mal wieder eure Hilfe:

    Also zum Realen Problem
    Ich will bei meine 1:87 Modellautos elektrifizieren. Für die Blinklichter will ich mir Flipfloppschaltung usw. sparen und das ganze über AVRs lösen. Es solle recht einfach werden, so bald ich Strom gebe soll alles Blinken was eine LED dahinter hat. Natürlich gibt es unterschiedliche Blinkfolgen, deshalb müssen mehrere Ausgänge des Tinys parallel den Strom aussenden.


    Die einzelnen Ports sollen nach folgendem Muster Strom geben:

    Einleitung
    Code:
    $regfile "attiny13.dat"
    
    'Angabe der Taktfrequenz (1Mhz)
    $crystal = 1200000                                          'die Taktfrequenz musst Du noch richtig setzen
    $hwstack = 16
    
    Dim A As Byte
    Dim B As Integer
    Dim C As Byte
    Dim Zaehler As Byte
    Dim Zeit2 As Byte
    Dim Zeit3 As Byte
    Dim Zeit4 As Byte
    
    A = 50
    B = 500
    C = 35
    
    Zeit2 = C * 2
    Zeit3 = C * 3
    Zeit4 = C * 4
    
    Config Portb = &B01111
    Blinkfrequenz für den PortB1
    Code:
     Do                                                    'Doppelblitz
                Portb.1 = 1
                Waitms A
                Portb.1 = 0
                Waitms A
                Portb.1 = 1
                Waitms A
                Portb.1 = 0
                Waitms B 
          Loop
    Blinkfrequenz für den PortB2
    Code:
     Do                                                    'Blaulicht Port.b2!
              Portb.2 = 1
              Waitms A
              Portb.2 = 0
              Waitms B
          Loop
    Blinkfrequenz für den PortB3
    Code:
     Do                                                    'Warnblink
              Portb.3 = 0
              Waitms B
              Portb.3 = 1
              Waitms B
          Loop
    Blinkfrequenz für den PortB4
    Code:
     Do                                                    'Triblitz 1.Strobo
              Portb.4 = 0
              Waitms B
              Portb.4 = 1
              Waitms C
              Portb.4 = 0
              Waitms C
              Portb.4 = 0
              Waitms C
              Portb.4 = 0
              Waitms C
              Portb.4 = 0
              Waitms C
              Portb.4 = 0
              Waitms C
          Loop
    Blinkfrequenz für den PortB5
    Code:
     Do                                                    'Triblitz 2.Strobo
              Portb.5 = 0
              Waitms B
              Portb.5 = 0
              Waitms C
              Portb.5 = 0
              Waitms C
              Portb.5 = 1
              Waitms C
              Portb.5 = 0
              Waitms C
              Portb.5 = 0
              Waitms C
              Portb.5 = 0
              Waitms C
          Loop
    Blinkfrequenz für den PortB6 (Wegen Reset nicht aktiv während des Testens)
    Code:
     Do                                                    'Triblitz 3.Strobo
              Portb.6 = 0
              Waitms B
              Portb.6 = 0
              Waitms C
              Portb.6 = 0
              Waitms C
              Portb.6 = 0
              Waitms C
              Portb.6 = 0
              Waitms C
              Portb.6 = 1
              Waitms C
              Portb.6 = 0
              Waitms C
          Loop
    Da es ja alles Do-Loop-Schleifen sind wird das Script ja nur bis zum ersten Loop abgespielt und alles weitere nicht berücksichtigt. Ich habe leider recht wenig Ahnung vom Programmieren, bin so ein richtiger Anfänger. Nun will ich ja dass an allen Pins entsprechend des Scripts Strom gegeben wird, ich weiß nur nicht wie man das macht.

    MfG
    Jannes

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Also...

    Du kannst im Programm Labels setzen.

    Code:
    Main:
    und hier den Code einfügen.....
    
    Sub1:
    Code für SUb1.....
    
    Blink1:
    Code für erste Blinkfolge....
    
    Blink2:
    Code für zweite Blinkfolge.....
    Die Labels (Main:, Sub1:, ...) kannst du mit Goto und Gosub anspringen.

    Nach Gosub in ein Label kannst bzw musst du mit Return zurückspringen. Dann geht das Programm dahin wo du weggesprungen bist.

    Nach Goto gibt es kein zurück wie bei Gosub.

    Den Name des Labels kannst du dir selbst aussuchen. Das Label im programm muss nach dem Namen ein : haben. Wenn du es ansprichst, darf da kein : hinter sein.

    Main:
    Gosub Sub1
    Gosub Blink1
    Gosub Blink2
    Goto Main


    Sub1:

    Hier den Code einfügen

    Return 'aus der Subroutine zurückspringen


    Blink1:

    Code.....

    Return


    Blink2:

    Code.....
    Hier könnte auch Gosub Blink1 oder so stehen......

    Return
    Wichtig ist es aber, das du nicht mit Gosub in ein Label gehst, das kein Return hat, oder mit Return aus ein Label zurück willst, das mit Goto angesprungen wurde!
    Da führt der AVR nämnlich irgendwann ein reset aus, weil der Stack übergelaufen ist.

    Soviel erstmal zu den Grundlagen.
    Ich kann dir folgende Seite mal ans Herz legen: http://www.rowalt.de/mc/index.htm

    Um auf dein Problem genauer einzugehen.

    Wenn ich das richtig verstanden habe, soll das Auto die ganze Zeit alle Varianten gleichzeitig durchspielen, oder?


    Wenn ja, dann wird die Programmierung etwas aufwendiger.

    Ein Wait oder Waitms oder Waitus macht im Programm so lange nichts, bis die Zeit abgelaufen ist. Die Zeit ist auch nicht sehr genau, aber das ist in diesem Fall ja nicht so relevant.

    Wenn eine LED an ist und 300mS gewartet werden soll, bis sie ausgeschaltet werden soll, wird in dieser Zeit auch wirklich nur gewartet. Durch die unterschiedlichen zeitlichen Abläufe kann es aber sein, das in genau dieser Zeit eine andere LED schon leuchten soll.
    Das geht aber nicht, weil der AVR noch wartet.
    Also musst du einen Timer verwenden.
    Der Timer sollte auf die kleinste gemeinsame "Wartezeit" gestellt werden. Immer wenn die Zeit erreicht ist, wird in die Routine des Timers gesprungen. Dort kannst du dann eine Variable hochzählen und im Hauptprogramm auswerten, welche LED grade geschaltet werden soll.

    Timer ist ein etwas komplexeres Thema. Ich will dir aber nicht alles vorkauen. Zum einen findest du mit der Suche viel Information zu Bascom und Timern und außerdem weiss ich ja noch nicht einmal genau, ob wirklich alles auf einmal blinken soll.
    Wenn alles der Reihe nach passieren soll, kannst du es auch anders lösen.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    07.08.2005
    Ort
    Schleswig-Holstein
    Alter
    36
    Beiträge
    41
    Uiuiui, da hab ich mir aber was ausgedacht...

    OK, es scheint komplizierter zu werden. Erstmal danke für die kleine Einführung. Ich werde mich wohl durch eins der Tutorials durcharbeiten müssen.
    Es wird ja durchaus vorkommen das zwei oder mehrere LEDs gleichzeitig Blinken. (alleine Warnblinker mit ca 1Hz, Blaulicht mit knapp mehr als 2Hz)

    Ich meine, hast du als Profi da denn eine konkrete Möglichkeit vor Augen, oder kann ich als Anfänger das gleich vorerst einstampfen?
    Man müsste das ganze auf den "kleinsten gemeinsamen Vielfachen" bringen, damit man das Script zyklisch ablaufen lassen kann. Soweit erstmal, ich melde mich nochmal.

    MfG

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Ich meine, hast du als Profi da denn eine konkrete Möglichkeit vor Augen, oder kann ich als Anfänger das gleich vorerst einstampfen?
    Profi bin ich noch lange nicht.
    Einstampfen würde ich das an deiner Stelle noch nicht gleich. Kommt aber auch immer auf den einzelenen an, wie motoviert er ist und wie geduldig und wie er lernen kann (nicht wie gut, sondern wie allgemein).

    Wie gesagt, ich würd's mit nem Timer machen. Und dann Sequenz für Sequenz ausprobieren und dann versuchen alles zu verbinden.

    https://www.roboternetz.de/phpBB2/dl...le&file_id=169 <--- Das hilft dir schonmal etwas beim Timer. Und der Rest ist dann überlegen, probieren, Fehlschläge einstecken, Erfolge erleben...

    Schau mal, was du so schaffst und beim Rest kannst du ja immer noch nachfragen.

    PS: Aber 1kB Flash wird da auch bald voll sein.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    07.08.2005
    Ort
    Schleswig-Holstein
    Alter
    36
    Beiträge
    41
    Naja, bei der Zeit (und auch dem Geld) die ich schon investiert habe werde ich mit Sicherheit nicht so schnell aufgeben. Nach den Problemen die ich überhaupt erst mit dem ISP hatte dachte ich nur jetzt würde es ganz schnell gehen, aber dann muss ich halt noch etwas weiter rackern, ich habe ja Hilfe .

    Ich habe zur Not noch 4x Tiny45, hatte, damit es sich lohnt, gleich eine etwas größere Bestellung gemacht. Wäre nur schade wenn ich die 13er nicht so einsätzen kann, dan hab ich nämlich ein paar zu viele, aber das regelt sich alles.

    Morgen werde ich mir mal die Zeit nehmen mir den Forumslink durch zu lesen, hoffentlich stelle ich mich nicht allzu doof an...

    MfG Jannes

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Sowas in der Art hab ich mal für nen Tiny15 in Assembler geschrieben.
    Wurde in einem Polizeiautomodell eingesetzt.

    Ist zwar wie gesagt Assembler, aber wenn Du willst kann ich es posten.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    07.08.2005
    Ort
    Schleswig-Holstein
    Alter
    36
    Beiträge
    41
    Gerne! Nur ein einzelnes Blaulicht bekomme ich ja auch hin, nur ist es eben mein Problem mehrere Pins Gleichzeitig mit verschiedenen Blinkfrequen laufen zu lassen.

    Grüße
    Jannes

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Ich habe zur Not noch 4x Tiny45
    Woher denn? Außer wenn von Conrad, dann hat sich die Frage erledigt.

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    [quote="Marco78"]
    PS: Aber 1kB Flash wird da auch bald voll sein.
    Aber nur bei schlechter Programmierung

    Wie hier schon im Tread angesprochen:

    1. Versuche den kleinsen gemeinsamen Nenner zu finden.
    2. zähle in der Timer ISR eine Variable hoch
    3. einfache Fallunterscheidung, z.B.:

    x=0 -> Blaulicht an
    x=15 -> Blinker an
    x=31 -> Blaulicht aus
    x=47 -> Blinker aus

    ich könnte die unter umständen ein entsprechendes Beispiel in Assembler posten ... nur stellt sich mir da die Frage ob du das überhaupt willst

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo,
    wie versprochen sende ich das Programm,
    wohl für den Tiny15, aber ich denke wenn man die tn15def.inc gegen tn13def.inc wechselt
    und neu assembliert sollte es ohne Problemme klappen.

    Ich hab kleine Änderungen vorgenommen damit das in etwa so geht, wie Du das vor hattest.

    Das Programm könnte man noch was optimieren, ich hab es vor einem Jahr geschrieben, aber es klappt gut

    Ich hatte es schnell auf dem STK500 aufgebaut, HIER ein kurzes Video davon
    (Ja, ja meine Frau hat Ihre Leidenschaft für Videobearbeitung entdeckt )
    Wenn du Fragen Hast, her damit.
    Ach ja noch ein Wort zu Hardware,
    die LED's sind gegen VCC geschaltet, man muß bei dem wegprogrammiertem Reset Pin aufpassen,
    er kann nur etwa 15 mA abführen, also entweder LED's die weniger brauchen, oder Treiber Transistoren davorschalten,
    und naja, wenn Du kein STK500 oder etwas in der Art hast hast Du nur einen Versuch

    Gruß Sebastian

    P.S.
    Aber 1kB Flash wird da auch bald voll sein.
    Angehängte Dateien Angehängte Dateien
    Software is like s e x: its better when its free.
    Linus Torvald

Seite 1 von 5 123 ... LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress