-         

Ergebnis 1 bis 8 von 8

Thema: Benötige ein wenig Programmierhilfe

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.11.2008
    Beiträge
    12

    Benötige ein wenig Programmierhilfe

    Anzeige

    Hallo zusammen!

    Wie schon im Hardwarebereich angedeutet, benötige ich hier nun ein paar Ratschläge bezüglich der Programmierung meines ATtiny25.

    Da ich früher schon mal ein wenig mit µCs machen mußte(Im Rahmen einer Fortbildung), lag mir noch in Erinnerung, dass bei Tastern z.B. eine Entprellung stattfinden sollte, damit ein Tastendruck auch zuverlässig erkannt wird.
    In Bascom scheint ja dafür die Funktion "debounce" direkt implementiert zu sein, zumindest habe ich das so verstanden!?

    Also fange ich folgendermaßen an:
    Code:
    $regfile = "atTiny25.dat"
    $crystal = 1000000
    $sim
    $hwstack = 24
    $swstack = 16
    $framesize = 32
    'by default the tiny25 has a 8 MHz internal osc.
    'and by default the internal 8 divider is enabled resulting in 1 Mhz clock freq.
    
    Config Debounce = 100
    
    Config Pinb.1 = Input
    Config Pinb.2 = Input
    Config Pinb.5 = Output
    Config Pinb.3 = Output
    Wie löse ich jetzt die Abfrage der Taster? Einfach über Debounce und dann in das passende Unterprogramm oder löst man das über einen externen Interrupt? (PCINTx), damit der Taster auch definitiv erkannt wird?
    Entweder ist Ausgang 1 aktiv oder es sind beide Ausgänge aktiv, bzw. beide aus. Nur Ausgang 2 an geht nicht!
    Taster 1 soll Ausgang 1 einschalten, aber auch Ausgang 1+2 ausschalten können. Taster 2 soll Ausgang 1+2 gleichzeitig einschalten und ebenfalls auch ausschalten können. Zusätzlich soll Taster 2 aber auch nur Taster 1 abschalten können.

    Vom Prinzip her so: ?
    Code:
    Do
       Debounce Pinb.1 , 1 , Hoch , Sub                         'Taster 1
       Debounce Pinb.2 , 1 , Runter , Sub                       'Taster 2
    Loop
    
    
    
    Hoch:
    
    If Portb.5 = 0 And Portb.3 <> 1 Then
       Set Portb.5
    Else
       Reset Portb.5
       Reset Portb.3
    
    End If
    
    Return
    
    
    
    Runter:
    
    If Portb.5 = 0 And Portb. = 0 Then
       Set Portb.3
       Wait 100
       Set Portb.5
    Else
       Reset Portb.5
       Reset Portb.3
    
    End If
    
    Return
    
    
    End
    Dazu kommt dann ein analoger Eingang, an dem 5V über ein 10K Poti anliegen. Dieser Eingang soll die automatische Ausschaltverzögerung steuern. Also wenn z.B. Taster 1 benutzt wird, soll Ausgang 1 durchschalten und gleichzeitig der Timer gestartet werden. Je nach anliegender Spannung am analogen Eingang, soll dann Ausgang 1 abgeschaltet werden, falls die Abschaltung nicht manuell über einen Taster erfolgt.
    Die Zeit soll von ca. 2sec bis ca. 90sek einstellbar sein, wobei die Obergrenze eigentlich egal ist nur mehr als 2min wird nicht benötigt.


    Code:
    Config Adc = Single , Prescaler = Auto
    Start Adc
    
    Dim Spannung As Integer
    Dazu dann in der Do Anweisung
    Code:
       Spannung = Getadc(2)
    um den aktuellen Wert zu haben?

    Wie bastle ich dann aber die Zeitfunktion zur Abschaltung? Das hier habe ich gefunden
    http://halvar.at/elektronik/kleiner_...dc_mit_getadc/
    weiß aber nicht so recht wie ich das einbauen muss. Vom Prinzip her müßte ich doch beim setzen eines Ausgangs den Timer starten und dann über den Timerinterrupt zählen. Über den analogen Eingang lege ich mit der Spannung die Zeit fest. Nur wie bringe ich das zusammen??

    Würde mir da vielleicht jemand einen Tip geben und auch zum Rest etwas sagen?

    Gruß
    Jörg

  2. #2
    Hallo Tetrapack,

    die Zeitschaltung mit Attiny13 auf meiner Hompage könnte dir da eventuell etwas weiterhelfen. Zwar ist die Schaltung nicht identisch mit deiner, allerdings handelt es sich hierbei auch um eine Ausschaltverzögerung.

    Gruß Flo

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    10.11.2008
    Beiträge
    12
    Hallo Flo,

    vielen Dank für den Tip!! Sieht auf den ersten Blick schon mal klasse aus

    Dann fehlt mir nur noch die Sache mit den Fusebits ... das hatte ich noch nicht aufm Plan, dachte "einfach überspielen und fertig" ^^


    Gruß
    Jörg

  4. #4
    Dann fehlt mir nur noch die Sache mit den Fusebits ... das hatte ich noch nicht aufm Plan, dachte "einfach überspielen und fertig" ^^
    Kommt natürlich jetzt drauf an, wie du deine Schaltung genau programmierst bzw. aufbaust. Wenn du die Schaltung so aufbaust wie auf meiner Hompage und du einen neuen Attiny13 nimmst, dann sind die Fusebits schon richtig eingestellt, da es sich bei den Einstellungen für die Zeitschaltung um die Default Einstellungen handelt.

    Ansonsten musst du natürlich die Fusebits anpassen.
    Dazu mal ein nützlicher Link.

    Gruß Flo

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    10.11.2008
    Beiträge
    12
    Ne, die Schaltung sieht etwas anders aus .. und benutzen werde/wollte ich einen Tiny25.

    Der Link ist interessant ^^ ... auf was muß man da denn achten?? Kann ich die Voreinstellungen nutzen, nur zusätzlich noch einen Haken bei PB5 (Reset), da es kein Resetpin ist sondern ein I/O ?

  6. #6
    Ne, die Schaltung sieht etwas anders aus .. und benutzen werde/wollte ich einen Tiny25.
    Schon klar, dass deine Schaltung etwas anders wird.

    Kann ich die Voreinstellungen nutzen, nur zusätzlich noch einen Haken bei PB5 (Reset), da es kein Resetpin ist sondern ein I/O ?
    Davon rate ich dir ab, einmal den Reset Pin als I/O Pin gesetzt, lässt sich der Controller, soweit ich mich erinnern kann, nur noch über einen Parallelprogrammer und nicht mehr über ISP programmieren.

    Du benötigst ja nach deiner Beschreibung folgende I/O Pins:

    2 x Ausgang
    2 x Eingang - Taster
    1 x ADC - Potentiometer

    oder hab ich einen übersehen?
    Der Attiny25 hat doch 6 I/O Pins mit Reset, da musst du doch den Reset nicht benutzen!

    Solltest du noch einen Pin mehr benötigen, könntest du folgendes in Betracht ziehen:

    Du könntest an einen ADC auch zwei Taster anschließen und die eingelesenen ADC_Werte z.B über Select Case auswerten. Ich hab dir mal ein Beispiel angehängt, wie du zwei Taster an einen Controller ADC anschließen könntest. Das Beispiel ist so ausgelegt, dass immer nur 1 Taster betätigt wird, ansonsten findet keine korrekte Auswertung statt. Soll auch ein Ereignis beim gleichzeitigen drücken beider Taster ausgeführt werden, müsste die Tastermatrix nochmal verändert werden.

    Zusätzlich soll Taster 2 aber auch nur Taster 1 abschalten können.
    Soll das heißen: Zusätzlich soll Taster 2 aber auch nur Ausgang 1 abschalten können?


    Gruß Flo[/quote]
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken tastermatrix_2.gif  

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    10.11.2008
    Beiträge
    12
    Danke für den Tip, aber dadurch das das Layout fertig ist und ich nur den PIC gegen einen AVR austauschen möchte, habe ich keine andere Wahl als PB5 zu einem I/O zu machen. Sorry falls ich das missverständlich geschrieben hatte!
    Das mit dem Resetproblem habe ich auch schon gefunden, das werde ich wohl in Kauf nehmen müssen ... aber leider läßt Ponyprog ein Deaktivieren nicht zu(zumindest die Version die ich jetzt habe) .. das Feld ist und bleibt ausgegraut. Gibt es da einen Trick?

    *edit*
    Ich habe mal dein Programm in Bascom geladen und versuche mich gerade am Simulator. Kann es sein, das der Durchlauf im Simulator wesentlich langsamer ist als in Echtzeit? Kann man den Simulator auch auf Echtzeit einstellen?


    Jörg

  8. #8
    Ich habe mal dein Programm in Bascom geladen und versuche mich gerade am Simulator. Kann es sein, das der Durchlauf im Simulator wesentlich langsamer ist als in Echtzeit? Kann man den Simulator auch auf Echtzeit einstellen?
    Im Moment kann ich dir die Frage nicht beantworten, da ich die Zeitschaltung bisher nur in Echtzeit laufen hab. Ich teste meine Programme zu 100% direkt an Hardware. Wenn es die Zeit zulässt werd ich mir das ganze die Woche mal im Simulator anschauen.

    Gruß Flo

Berechtigungen

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