-
        

Ergebnis 1 bis 7 von 7

Thema: Frage zum Programmablauf

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    15.07.2006
    Beiträge
    9

    Frage zum Programmablauf

    Anzeige

    Hallo Leute,

    ich lese schon eine ganze Weile hier im Forum mit und will nun auch ein kleines Projekt verwirklichen und bräuchte dazu Ratschläge und Hilfe.
    Bin also totaler anfänger hab außer wenn man einen taster drückt brennt ein LED noch nicht viel geschafft unter BASCOM.

    Ich habe einen ATTINY25 ohne weitere exterene Beschaltung den ich mit Bascom Programmieren will.

    Folgendes soll der ATTINY machen:

    wenn an PB0 low anliegt soll PB1 auf high geschaltet werden 4 sekunden warten danach PB2 auf High schalten.
    Der Pegel an PB0 ist ein BUS ändert also ständig zwischen High und Low.
    Wenn der Pegel am Bus Länger als 10 Minuten auf High (Ruhezustand) ist sollen PB1 und PB2 auf Low schalten.

    Wie realisiert man sowas am besten vom Programmablauf her? Wie muss ich die Timer benutzen?

    Vielen Dank für eure Hilfe.

    Gruss Freaky!

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    15.07.2006
    Beiträge
    9
    Hallo,

    warum will mir eigentlich keiner Antworten? Es duerfte doch fuer geuebte Leute kein Problem sein mir zu sagen wie ich das Programm am besten Ablaufen lasse.

    Danke!

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    DIe Lösung ist davon abhängig, wie kurz oder lang ein LOW-Inpuls an PB0 ist bzw. sein kann.
    Sprich: wie häufig muß man nachsehen, damit einem so ein LOW-Signal nicht durch die Lappen geht ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    15.07.2006
    Beiträge
    9
    Hallo,

    also es handelt sich um den I-Bus des BMW.
    Die baudrate ist 9600 Kbits/s
    Ein Telegramm dauert zwischen 5ms und 30ms.
    Also sind die LOW Zeiten recht kurz.
    Der ATTINY hat 20Mhz.

    Gruss Freaky!

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    I see.
    Dann gibts drei Möglichkeiten:

    In der Haupt DO-LOOP Schleife dein Input kontrollieren und in einer TIMER- Interrupt-Routine für die Beleuchtung sorgen.

    In der DO-LOOP Schleife die Beleuchtung und die Input-Kontrolle mit einem "Externen Interrupt" machen.

    In der DO-LOOP Schleife nix,
    die Beleuchtung im Timer-Interrupt
    Input-Kontrolle im "externen" Interrupt


    In allen Fällen gleich, nur eben anders placiert:

    Initialisierung
    Code:
      Zähler für die 10 Minuten laden
      Zähler für die 4 Sekunden auf NULL
    Input Kontrolle:
    Code:
    Wenn PB0 = 0 (low)
      PB1 auf HIGH
      Zähler für die 10 Minuten zurücksetzen
      Zähler für die 4 Sekunden laden
    ENDIF
    Beleuchtung:
    Code:
      Wenn 4-Sekundenzähler > 0   
              -1  
             Ist der Zähler dann auf null
                 PB2 auf HIGH
             endif
      endif
    
      Wenn 10-Minutenzähler > 0   
              -1  
             Ist der Zähler dann auf null
                 PB1 auf LOW
                 PB2 auf LOW
             endif
      endif
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    15.07.2006
    Beiträge
    9
    Hallo,

    bin grad dabei das ganze in ein Programm umzusetzen.
    Eine frage, beim Attiny heissen die Iinterrupts ja PCINT Pinchange Int.

    Wie muss ich die intialisieren? Irgendwie klappt das net.
    Hab mir die Initialisierung aus dem INT0.BAS abgeguckt und nur INT0 in PCINT0 geaendert, aber das klappt leider net...

    Danke!

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    15.07.2006
    Beiträge
    9
    Hallo Leute,

    ich habe etz ein Funktionierendes Programm. Kann sich das mal jemand anugcken und Optimierungsvorschlaege machen?
    Wie gesagt, mein erstes Programm.

    Code:
    $regfile = "ATtiny25.dat"
    $crystal = 1000000
    
    Config Pinb.0 = Input
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Timer0 = Timer , Prescale = 1024
    Disable Timer0
    On Timer0 Timer0_isr
    Enable Interrupts
    Dim Tdown As Integer
    Dim Tbus As Integer
    Dim Tstat As Integer
    Dim Busstat As Integer
    
    Tdown = 2400
    Tbus = 16
    Tstat = 0
    Busstat = 0
    
    Ibus Alias Pinb.0
    K1 Alias Portb.1
    K2 Alias Portb.2
    
    K1 = 1
    K2 = 1
    
    Do
       If Ibus = 0 And Tstat = 0 Then
          K1 = 0
          Tstat = 1
          Enable Timer0
       End If
       If Ibus = 0 And Tstat = 1 And Busstat = 1 Then
          Tdown = 2400
       End If
    Loop
    End
    
    Timer0_isr:
       Decr Tdown
       Decr Tbus
          If Tdown = 0 Then
             K1 = 1
             K2 = 1
             Tstat = 0
             Tdown = 2400
             Tbus = 16
             Disable Timer0
          End If
          If Tbus = 0 Then
             K2 = 0
             Busstat = 1
          End If
    Return
    Vielen Dank!

Berechtigungen

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