Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12
  1. #1
    Avatar von rreh
    Registriert seit
    30.10.2006
    Beiträge
    122

    ATTiny45 zur Impulsanpassung zwischen Pistolensendern und älteren Reglern

    Einführung:
    Mit diesem Projekt läßt sich meiner Meinung nach hervorragend ein Einstieg in die Microcontrollerprogrammierung finden. Nachahmung ist dringend empfohlen! 'Normale' Elekronikkentnisse reichen aus um anzufangen und dazuzulernen. Der Schaltungsaufbau stellt ein einfaches 'Entwicklungsboard' dar, das auch für andere Ideen verwendet werden kann. Die Materialkosten betragen ca. 5 Euro. Ein Programmiergerät im Eigenbau fast nichts, sonst zwischen 10-15 Euro. Software für die Leiterplattenentwicklung und die Programmierung gibts umsonst. Leiterplattenerstellung (Bügeleisenmethode) auch fast umsonst (wer keine Laserdrucker hat geht in den Copyshop) oder einfach per Lochrasterplatte.

    Funktion:
    Die Impulse des Pistolensenders die eine Länge von ca. 1,5 ms bis 2 ms haben (Mittelstellung-Vollgas), werden in Impulse zwischen 1 ms bis 2 ms umgesetzt.
    Wird die Schaltung ohne Eingangssignal eingeschaltet, blinkt die LED 1x dann 1 Sekunde Pause.
    Bei eingeschaltetem Sender wird versucht automatisch die Nullstellung zu bestimmen. Die ersten 10 Impulse die eine identische Länge haben werden als Nullposition gespeichert. Die LED blinkt 3x und dann 1 Sekunde Pause.
    Dann Vollgas geben. Es werden 50 identische Impulse abgewartet, die mindestens 0,3 ms länger sein müssen als die vorher ermittelte Nullstellung. Die LED blinkt ab jetzt immer 5x + 1 Sekunde Pause.
    Im Normalfall immer erst den Sender einschalten. Dann den Empfänger. Die LED wird immer 3x blinken + pause. Dann Vollgas geben bis die LED beginnt 5x zu blinken.
    Fertig.
    Gummibandtricks sind nicht mehr nötig.

    Erprobung:
    Leider habe ich den Aufbau noch nicht auf dem Wasser testen können. Ist nicht so die Jahreszeit . Ich möchte mir in den nächsten Monaten evtl. ein Sumpfboot bauen. Da kommt dann u.a. ein älterer Flugregler zum Einsatz, der nicht Pistolenfähig ist.

    Ich werde Schaltung und Programm in extra Beiträge packen. Die kommen noch heute abend rein.

    Ragnar

  2. #2
    Avatar von rreh
    Registriert seit
    30.10.2006
    Beiträge
    122

    ATTiny45 die Schaltung

    Zur Schaltung gibt es nicht viel zu sagen.
    Ist sozusagen ein ATTiny in Minimalbeschaltung.

    JP1 bildet den Anschluß zum Empfänger und zum Regler inkl. Betriebsspannung.
    Die nötigen Kabel können natürlich auch direkt angelötet werden. Ich setze ganz gern sogenannte 'Präzisionstestsockel' ein aus denen ich mir selbst Steckverbinder bastle.

    JP2 ist ein Wannenstecker für den ISP Programmieradapter. Kann natürlich entfallen, wenn man den IC auf einer Testplatine o.ä. programmiert.

    R1 der Reset an + zieht kann durch eine Drahtbrücke ersetzt werden, wenn auf die Programmierschnittstelle in der Schaltung verzichtet wird.

    LED1 + R2 zur Statussignalisierung an Port B2.
    Port B1 und B0 sind frei und könnten noch für andere Zwecke verwendet werden.
    Wenn mir noch andere Ideen kommen werde ich mich dann einfach auf JP2 draufstecken.

    Ursprünglich gab es R3 nicht und C1 war eine 100n Scheibe.
    Ab und zu kam es dazu, daß sich das Programm 'verschluckte'. Ich hatte zu Testzwecken anstelle des Reglers ein Servo angeschlossen. Die Qualität des Signals ist so besser sicht- und hörbar.
    Wenn ich wie wild das Eingangssignal veränderte, hing sich die Schaltung ab und zu auf.
    Nach einigem suchen (ich vermutete zuerst einen Softwarefehler), stellte ich fest, daß ein Controllerreset ausgelöst wurde.
    In der Betriebsspannung kam es zu Spannungseinbrüchen im Nanosekundenbereich die zu einem Reset führten.
    Deshalb habe ich die Siebung der Betriebspannung verbessert, indem ich den Kondensator durch 22µF Tantal ersetzte und einen Reihenwiderstand (Schottkydiode wäre auch gut) zwischengeschaltet habe.
    Seitdem gibt es keine Probleme mehr.

    Ragnar

    Bauteilliste:
    IC1 ATTiny45
    R1 10k
    R2 180 Ohm
    R3 50 - 100 Ohm
    LED1 egal., evtl. R2 anpassen
    C1 10-47µF Tantal oder alternativ Elektrolyt, aber dann noch 100nF Scheibe parallel schalten
    JP2 Wannenstecker 2x5
    JP1 egal / bei mir Eigenbau

    Die Schaltung ist mit Eagle gezeichnet. Bin da noch nicht so fit. Das Symbol für den IC hätte ich gern anders dargestellt, dann würden nicht so viele Linien über kreuz laufen. Da muß ich mich noch so nach und nach reinfuchsen.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	gummi.jpg 
Hits:	23 
Größe:	50,0 KB 
ID:	923  

    Angehängte Dateien Angehängte Dateien
    Geändert von rreh (30.12.2006 um 21:56 Uhr)

  3. #3
    Avatar von rreh
    Registriert seit
    30.10.2006
    Beiträge
    122

    ATTiny45 das Layout

    Das Layout wurde auch mit Eagle erstellt.
    Klappte ganz gut, früher habe ich alles per Hand erstellt.
    Zielvorgabe war es, in einer Ebene zu bleiben.
    Eine Drahtbrücke habe ich reingesetzt. Hätte man zwar auch vermeiden können, aber ich wollte nicht zu eng werden, falls ich per Hand zeichnen müßte.
    Lochraster ist natürlich auch kein Problem.
    Ich wollte jedoch gerne die Bügeleisenmethode testen und ich bin begeistert!
    siehe: http://thomaspfeifer.net/platinen_aetzen.htm
    Nie mehr per Hand.
    Bitte beachten: Beim Ausdruck für die Bügeleisenmethode nicht spiegeln!

    Ragnar
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	layout1.JPG 
Hits:	16 
Größe:	59,9 KB 
ID:	925  

    Klicke auf die Grafik für eine größere Ansicht 

Name:	layout2.JPG 
Hits:	12 
Größe:	33,9 KB 
ID:	926  

    Angehängte Dateien Angehängte Dateien

  4. #4
    Avatar von rreh
    Registriert seit
    30.10.2006
    Beiträge
    122

    ATTiny45 der Aufbau

    Der Aufbau ist unspektakulär.
    Den IC habe ich auf einen Sockel gesetzt, so habe ich gleich ein Programmierboard oder ich kann mir den Tiny45 mal ausborgen.
    R3 ist bei diesem Aufbau noch auf der Unterseite, da nachträglich eingefügt.
    Das Teil als SMD-Variante und ohne Programmierstecker wäre fast unsichtbar.

    Ragnar
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	Aufbau.jpg 
Hits:	15 
Größe:	41,8 KB 
ID:	928  


  5. #5
    Avatar von rreh
    Registriert seit
    30.10.2006
    Beiträge
    122

    ATTiny45 die Software

    Die Programmierung erfolgte in BASCOM.
    Für den Einstieg nicht schlecht. Kostenlos bis 4kByte Codegröße (nicht der Quelltext) . Passt also gut zum Tiny45.
    Im Moment ist der Code < 2 KByte, also ein Grund für übertriebene Einsparungen.

    Wichtig bei 1 Programmieren: Fusebit H - 1 Divide clock by 8, OFF
    sonst wird der Tiny nur auf 1 MHz getaktet (Auslieferungszustand)

    Code:
    $regfile = "ATtiny45.DAT"
    $crystal = 8000000
     
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 10                                               'default use 10 for the SW stack
    $framesize = 40                                             'default use 40 for the frame space
     
     
    Dim Startcounter As Byte
    Startcounter = 0
    Dim Nullpunkt As Integer
    Dim Vollgascounter As Byte
    Vollgascounter = 0
    Dim Vollgas As Integer
    Dim Scalefactor As Integer
    Dim Lasttimercount As Integer
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer
    Dim L As Integer
     
    Dim Timercount As Byte
     
    Config Portb.0 = Input                                      ' Konfiguration als Eingang
    Config Portb.1 = Input                                      ' Konfiguration als Eingang
    Portb.0 = 1                                                 '  Pullup aktiv
    Portb.1 = 1                                                 '  Pullup aktiv
    Config Portb.2 = Output
    Config Portb.3 = Output
    Config Portb.4 = Input
    Portb.4 = 1                                                 '  Pullup aktiv
     
     
    Gimsk.5 = 1                                                 ' PinChange enable
     
    Pcmsk = &B00010000                                          ' PB4 change aktiv
     
    Tccr1 = &B00001000                                          ' Prescale 128
       ' d.h. alle 16 µsekunden wird um 1 weitergezählt, 1 ms entspricht ca. 62 Timerereignissen
     
    On Pcint0 Readrctime                                        ' Interruptvector zur Interruptroutine setzen
     
    Portb.2 = 1                                                 ' LED aus
    Portb.3 = 0                                                 ' Ausgang zum Regler auf LOW
     
    Enable Interrupts
     
     
    ' Endlosschleife Hautprogramm, die Abarbeitung wird nur durch die Interruptroutine ReadRCtime unterbrochen
    Do
      If Startcounter <> 100 Then
        L = 1                                                   ' es wurde noch kein Impuls erkannt
      Else
        L = 3                                                   ' Nullposition erkannt
         If Vollgascounter = 100 Then
           L = 5                                                ' Endposition erkannt / Normalbetrieb
         End If
      End If
      For K = 1 To L
         Portb.2 = 0
         Waitms 200
         Portb.2 = 1
         Waitms 200
      Next K
      Waitms 1000
    Loop
     
    '-------------------------------------------------------------------------------
    Readrctime:
      If Pinb.4 = 1 Then
        Tcnt1 = 0
      Else
        Timercount = Tcnt1
        Gosub Nullstellung_bestimmen
        Gosub Vollgas_bestimmen
        Gosub Gummi
      End If
    Return
    '-------------------------------------------------------------------------------
    Gummi:
      If Vollgascounter <> 100 Then
        Return
      End If
      If Startcounter <> 100 Then
        Return
      End If
      I = Lasttimercount - Timercount                           ' Differenz zum letzten Zählerwert
      I = Abs(i)
      If I > 1 Then                                             ' Änderung des Zählerwertes muß > 1 sein um akzeptiert zu werden
        Lasttimercount = Timercount                             ' verhindert 'springen' des Ausgansignals
      Else
        Timercount = Lasttimercount
      End If
      I = Timercount
      I = I - Nullpunkt
      If I < 0 Then
        I = 0
      End If
      I = I * Scalefactor
      I = I + 1000                                              ' 1000µs ist der wert für den nullpunkt
      If I > 2100 Then
        I = 2100
      End If
      I = I * 2                                                 ' da 8MHz statt 4MHz Takt, siehe Hilfe für puseout
      Portb.3 = 0
      Pulseout Portb , 3 , I                                    ' i = 2000 entspricht 1 ms / toggelt portb.3
    Return
    '-------------------------------------------------------------------------------
    Vollgas_bestimmen:
      If Vollgascounter = 100 Then
        Return
      End If
      If Startcounter <> 100 Then
        Return
      End If
      I = Nullpunkt + 20                                        ' nur positionen die 0,32 ms (20*16µs) länger sind als die Nullposition werden akzeptiert
      If I > Timercount Then                                    ' man muß schon Gas geben
        Return
      End If
      If Vollgascounter = 50 Then
        Vollgas = Vollgas / 50                                  'abs(nullpunkt)
        Vollgas = Vollgas - Timercount
        Vollgas = Abs(vollgas)
        If Vollgas < 5 Then                                     ' toleranzgrenze
          Vollgas = Timercount
          Vollgascounter = 100
          I = Vollgas - Nullpunkt
          Scalefactor = 1100 / I                                ' * eigentlich 1000 aber 1100 damit bei vollgas 2100µs Impulslänge
        Else
          Vollgascounter = 0
        End If
        Return
      End If
      Incr Vollgascounter
      Vollgas = Vollgas + Timercount
    Return
    '-------------------------------------------------------------------------------
    Nullstellung_bestimmen:
      If Startcounter = 100 Then
        Return
      End If
      If Timercount < 50 Then
        Startcounter = 0
        Return
      End If
      If Timercount > 105 Then
        Startcounter = 0
        Return
      End If
      If Startcounter = 10 Then
        Nullpunkt = Nullpunkt / 10                              'abs(nullpunkt)
        Nullpunkt = Nullpunkt - Timercount
        Nullpunkt = Abs(nullpunkt)
        If Nullpunkt < 5 Then                                   ' toleranzgrenze für unterschiedliche impulslängen
          Nullpunkt = Timercount
          Startcounter = 100
        Else
          Startcounter = 0
        End If
        Return
      End If
      Incr Startcounter
      Nullpunkt = Nullpunkt + Timercount
    Return
    '-------------------------------------------------------------------------------
    Rctimeerror:                                                ' noch nicht implementiert
    Return
    Ragnar
    Angehängte Dateien Angehängte Dateien
    Geändert von rreh (31.12.2006 um 14:46 Uhr)

  6. #6
    Avatar von rreh
    Registriert seit
    30.10.2006
    Beiträge
    122

    ATTiny45 Hinweise zum Programm

    Die Programmhaupschleife dient nur zur Signalisierung des augenblicklichen Status über die LED. Ohne LED könnte man alles zwischen DO - LOOP weglassen.

    Die eigentliche Funktion wird durch einen Interrupt gesteuert.
    Über die Register GIMSK und PCMSK wird festgelegt, daß immer wenn sich der Pegel an Port B4 ändert ein Interrupt ausgelöst wird.

    Zunächst geht es darum die Länge des Impulses zu bestimmen.
    Dazu braucht man einen Timer. Der Tiny45 hat leider nur zwei 8-Bittimer (Timer0 und Timer1).
    Ich habe Timer1 benutzt, da sich der Prescaler feiner einstellen läßt. Da BASCOM den Timer1 des Tiny45 nicht unterstützt, muß das per Hand über Register TCCR1 erfolgen.

    Wenn im Interruptfall als Pegel High erkannt wird (If pinb.4 = 1) wird der Timer auf 0 gesetzt (TCNT1 = 0).
    Beim nächsten Interrupt, wenn der Pegel wieder 0 ist wird der Zählerstand bestimmt, und in 'timercount' gespeichert.

    Dann wird ein bischen gerechnet, bzw. die Nullposition und die Vollgasposition bestimmt. Als Flag dafür werden die Variablen 'startcounter' und 'vollgascounter' auf 100 gesetzt. Nicht ganz schön, war aber zu faul das zu ändern (ein extra Flag dafür wäre besser gewesen). Dann wird nur noch das Unterprogramm 'Gummi' ausgeführt, das dann die Länge des Ausgansimpulses berechnet und über 'Pulseout' setzt.

    Der 'Servo' Befehl von BASCOM den ich anfangs eingesetzt habe, war nicht so günstig. Es laufen dann 2 Interruptroutinen, was sich auf die Genauigkeit der Impulserzeugung und der Impulsmessung auswirkt.
    Die Folge ist sporadisches 'Servozittern' da Impuserzeugung und Messung nicht synchron laufen.

    Im Moment wird also immer an den Anschluß der Messung eines Eingangssignals das neue Ausgangssignal erzeugt. Für den geplanten Einsatzzweck kein Problem.

    Erweiterungsmöglichkeiten gibt es sicher noch viele.
    z.B. eine Störimpulerkennung und Eliminierung.

    Man kann das Programm auch noch viel einfacher machen.
    Wenn sich auf konkrete Impulslängen festlegt, würde ein Großteil des Programms entfallen. Eine Einschaltkalibrierung wäre dann nicht mehr nötig.
    Die Nulllage würde man dann einfach am Sender kalibrieren.



    Das war's erst mal.
    Evtl. inspiriert ja dieses kleine Projekt auch andere Modellsportler sich ein wenig mit Microcontrollern zu befassen.

    Ragnar

  7. #7
    Administrator
    Registriert seit
    06.10.2006
    Beiträge
    862

    AW: ATTiny45 Hinweise zum Programm

    Hey Ragnar,

    THANKS FOR SHARING!

    Ich finde Dein Projekt prima und wirklich gutes Futter für Leute, die selbst ein wenig weiterentwickeln wollen.

    An der Stelle wäre es vielleicht angebracht, die User zu berücksichtigen, die zwar gern dieses Projekt selbst nachbauen würden, denen aber die grundlegenden Möglichkeiten fehlen. Evtl. wäre es ja von allgemeinem Interesse, einen ganz billigen Programmieradapter bereitzustellen (Ragnar Du weißt schon was ich meine - diesen einfachen, parallelen für Bascom direkt) und die MikroController?

    Bascom selbst kann ja in der aktuellen Version problemlos alle kleinen Projekte compilieren ohne gekauft zu werden, die Demo reicht ja locker dafür (4Kb Hex glaub ich?).

    Wenn also Interesse besteht, würde ich einen Programmieradapter dafür anbieten und die entsprechenden Controller. Falls nicht, kann jeder Interessent auch bei folgenden Quellen alle Materialien problemlos selbst beziehen:

    MikroController ATtiny45: LINK
    Programmieradapter (seriell): LINK
    Programmieradapter (parallel): LINK
    Programmieradapter (Selbstbau): LINK

    Bascom Compiler: LINK

    LG,
    Bruno

  8. #8
    Björn Roll Avatar von Sushi
    Registriert seit
    27.10.2006
    Alter
    34
    Beiträge
    640

    AW: ATTiny45 zur Impulsanpassung zwischen Pistolensendern und älteren Reglern

    Sagt mal,gibt es eigentlich auch Programmer die über USB laufen? Mein alter Rechner ist ohne Monitor hinter meiner Anlage als MP3-Player abgestellt und wird nur noch über VNC gesteuert...
    Alles andere mache ich mit dem Notebook und das hat keine seriellen und parallelen Schnittstellen mehr. Schätze mal, in naher Zukunft wirds den neu gekauften desktop rechnern genau so gehen...
    Der Zugriff auf die parallele Schnittstelle per Software (für eigenbauten, die software von atmel wirds wohl können^^) ist unter windoof xp ja auch kein kinderspiel mehr...

    LG, Björn

  9. #9
    David Kalwar Avatar von ChiefGlider
    Registriert seit
    28.10.2006
    Alter
    32
    Beiträge
    46

    AW: ATTiny45 zur Impulsanpassung zwischen Pistolensendern und älteren Reglern

    Dafür gibt es Adapter, z.B.:

    http://cgi.ebay.de/USB-ZU-SERIELL-AD...QQcmdZViewItem

    Sicher gibt es auch USB-Programmer. Jedoch wird meistens das Serielle vorgezogen, da es kostenlos ist. Für USB braucht man eine Lizenz.
    Gruß,
    David


  10. #10
    Björn Roll Avatar von Sushi
    Registriert seit
    27.10.2006
    Alter
    34
    Beiträge
    640

    AW: ATTiny45 zur Impulsanpassung zwischen Pistolensendern und älteren Reglern

    Hi David,
    die Dinger kenne ich,habe aber glaub ich mal gehört, dass das nicht in allen Anwendungsfällen funktioniert...

    LG, Björn

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Eure Erfahrungen mit Reglern
    Von Neubi im Forum Motore & Steller
    Antworten: 11
    Letzter Beitrag: 03.04.2008, 21:45
  2. Temperaturschutzfunktion bei JAZZ Reglern
    Von clmanu im Forum Motore & Steller
    Antworten: 13
    Letzter Beitrag: 28.10.2007, 11:28
  3. ATTiny45 ersetzt Gummiband
    Von rreh im Forum geplante Projekte
    Antworten: 2
    Letzter Beitrag: 27.12.2006, 08:06
  4. Not-Aus bei BL-Reglern??
    Von Schmiermaxe im Forum Motore & Steller
    Antworten: 3
    Letzter Beitrag: 17.11.2006, 19:22

Berechtigungen

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