- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Attiny13 Bewegungsmeldersignal auswerten

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    48
    Beiträge
    142
    Anzeige

    LiFePo4 Akku selber bauen - Video
    So habe mein Problem jetzt gelöst.
    Ich habe mir das Signal für die Bewegung genauer angeschaut und festgestellt, das nach fast jedem Aussachlten der LED´s der Bewegungsmelder nochmals ein bis 2 mal kurz ein Signal ausgibt.
    Dieses Signal brauch ich nur zu unterdrücken.
    Aber jetzt habe ich dank euch wieder was gelernt.

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    48
    Beiträge
    142

    Brett vor´m Kopf

    Also es ist mir ja jetzt schon ein wenig peinlich aber warum funktioniert
    dieses programm nicht?

    Über einem Mäuseklavier gebe ich über 3 Pins die Vergleichsgröße Dip an.
    En an Pin B4 eine 1 dann Pin B3 an.

    Zähler von timer wird mit Dip Wert verglichen und schaltet bei erreichen des vorgegebenen wertes Pin B3 aus.

    Die Schaltung macht was sie will. hängt der Eingang in der Luft flackert die LED Beleuchtung. Lege ich 5 Volt an bleibt sie an.
    Lege ich 0 Volt an passiert mal garnichts oder sie geht aus.

    Kann mir mal jemand das Brett vom Kopf schlagen ?




    Code:
    $regfile = "attiny13.dat"
    $crystal = 4800000
    
    Ddrb = &B11101000                                           'Pin PB4 Eingang Melder PB0-3 Eingang Dip Schalter Rest Ausgang
    
    
    Dim Zaehler As Integer
    Dim Dip As Integer                                           'Leider Nur 8 Bit Timer Bis 255 Ca 15 X Interrupt = 1 Sekunde       '61630
    
    On Timer0 Ontimer0                                          'verzweige bei Timer1 überlauf zu   Isr_von_Timer0
    Config Timer0 = Timer , Prescale = 64
    Enable Timer0
    Enable Interrupts                                           'schalte den Timer0 ein
    
    'Timer0 = 0
    
    
    
    
    Zaehler = 0
    '---------------------------DIP Schalter Abfrage------------------------------
    If Pinb.0 = 1 Then                                          'dipschalter 1
       Dip = 3
       End If
    
    If Pinb.1 = 1 Then                                          'dip2
       Dip = 10
       End If
    
    If Pinb.2 = 1 Then                                          'dip3
       Dip = 10000
       End If
    '---------------------------DIP Schalter Abfrage------------------------------
    
    
    
    Do
    If Pinb.4 = 1 Then                                                                         
       Pinb.3 = 1
       End If
    'Wait 3
    
    
    
    
    If Zaehler > Dip Then
       Zaehler = 0
       Pinb.3 = 0
     '  Wait 3
       End If
    Loop
    
    
    
    Ontimer0:                                                   'ISR von Timer1
    Zaehler = Zaehler + 1
    Return

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo mirco99,

    welche Timer-Frequenz möchtest du denn haben?

    Bei einem 8-Bit-Timer, deiner angegebenen Quarzfrequenz von 4,8 MHz (wo gibts denn den Quarz?) und dem Prescaler 64 erhalte ich eine Timer-Frequenz von 75000 Hz. Deine Integer-Zählvariablen reichen da gerade mal eine fünftel Sekunde, bevor sie überlaufen.

    Gruß Dirk

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    48
    Beiträge
    142
    Hallo Dirk,
    die 4,8 Mhz hat der Attiny 13 intern als Standart gesetzt.
    Ich benutze keinen Quarz.
    Über die Zeiten habe ich mir noch keine großen gedanken gemacht.
    Die Software müsste halt nur sofort wieder ausschalten, weil der Zähler größer als der Dip Wert ist Und da der Zähler dann auf 0 gesetzt wird, kann er auch nicht überlaufen. Oder habe ich da einen Denkfehler?
    Ich wollte den Controler auf 128kHz stellen. Danach war er nicht mehr programmierbar. Mit der jetzigen Taktrate schaffe ich 4,7 kHz Überlauffrequenz bei Prescale = 1024.

    Warum schaltet der Controler dann nicht sofort ab und macht nur nicht nachvollziehbare sachen?

    Ich habe zwischen Eingang und Masse einen Kondensator geschaltet, so das der Eingang etwas beruhigt wird.

    Warum schaltet die Beleuchtung obwohl der Eingang auf 0V liegt nicht immer ab?Ich werde den Timerüberlauf in der Frequenz über die Software Teilen.

    Aber der Code ist doch sonst in Ordnung oder ?
    Warum erreiche ich den Controler nicht mehr wenn er auch 128kHz laufen soll?

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    ...ich weiß auch noch was!

    En an Pin B4 eine 1 dann Pin B3 an
    Wenn Du damit meinst, dass B3 auf High gehen soll, wenn an B4 ein High-Signal anliegt, dann steckt hier der Fehler:

    If Pinb.4 = 1 Then
    Pinb.3 = 1
    End If
    Und zwar in der 2. Zeile - finden musst Du ihn aber selber

    Außerdem klingt Flackern in der Luft ganz schwer nach fehlendem PullUp-Widerstand. Wenn Du keinen Hardware-Widerstand verlötet hast, schreib´ doch mal die Zeile

    PortB.4=1

    rein.

    Und wieso setzt Du den Vergleichswert Dip auf 10.000, wenn der Timer nur bis 255 zählen kann?

    Gruß & Co.,

    Daniel

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    O.k. - meine letzte Frage war blöde... Du vergleichst Dip ja mit der Integer-Variablen Zähler. Das passt.

    Dafür ist der gleiche Fehler hier nochmal - diesmal aber in Zeile 3:
    If Zaehler > Dip Then
    Zaehler = 0
    Pinb.3 = 0
    Mit 4,8 MHz und einem Prescaler von 64 läuft der Timer0 aber ca. 290 mal pro Sekunde über. Während der ersten 3 Wait-Sekunden erreicht "Zähler" also schon mal einen Wert von knapp 1000.

    Kannst Du vielleicht nochmal so ansatzweise erklären, was das Programm machen soll??

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    48
    Beiträge
    142
    Hi Daniel,

    der Timer zählt bis 255 und springt dann in die isr. Dort wird dann x um eins erhöht.
    Mit dem fehlenden Pull up oder pull down Widerstand hast du recht. Den habe ich aber mit Absicht nicht angebracht, da die Beleuchtung bei freiem Pin an bleiben müsste ohne sichtbares flackern. Später schliesse ich eine ttl Logic von einem Bewegungsmelder an.

    Der Wait Befehl ist ausgeklammert!

    Ich habe mit Pin und Port rumexperimentiert.
    Wann muss man Pin und wann Port schreiben?


    Nochmal zum Verständniss

    Ich habe einen bewegungsmelder,der bei Bewegung für ca. 1 Sekunde ein High ausgibt. Der Controler soll jetzt einen Verbraucher so lange einschalten wie die Dip Schaltereinstellung ist.
    Also ist es ein Zeitschalter it ein und Ausgang und Zeitvorgabe.

    Pinb.4 ist der Eingang
    Pinb.3 ist der Ausgang

    Aber ich denke eine Abfrage macht man mit dem Befehl pin und Ausgänge mit Port. Stimmt das?

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    48
    Beiträge
    142
    Ich habe das problem gelöst

    es war tatsächlich eine pin und port Frage.
    Das habe ich dazu gefunden

    Bascom ist da nicht ganz konsequent (find' ich)

    Im Progranmm, auf jeden Fall und immer (spezial lassen wa weg):
    IF PIND.0 = 1 THEN PORTD.1 = 0

    Beim CONFIG dagegen etwas strange:

    Geht es ums ganze Port
    CONFIG PORTB = Input / Output

    Geht es aber um einzelne Pins, dann
    CONFIG PINB.1 = Input / Output

    Danke

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Ja - das mit den PINs und PORTs ist am Anfang etwas babylonisch

    Deshalb arbeite ich als einfach strukturierter Mensch auch am liebsten direkt mit den DDR-Registern.

    Falls Du das Kommunikationsproblem bei 128kHz Taktfrequenz noch nicht gelöst haben solltest: Die Programmierung des Controllers sollte mit einer Taktfrequenz erfolgen, der weniger als 1/4 des Controller-Taktes ist. In diesem Fall also unter 32 kHz. Ich weiß ja nicht, womit Du den Controller "brennst" - aber da solltest Du mal fahnden. Übliche Frequenzen im Bereich mehrerer 100 kHz liegen da deutlich zu hoch.

    Bei 128 kHz Taktfrequenz und einem Prescaler von 1024 hättest Du nämlich nur noch alle 0,5 Sekunden einen Überlauf - da wäre das Berechnen des Vergleichswertes recht komfortabel.

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    48
    Beiträge
    142
    Hi,
    ich programmiere mit nem selbstgebauten paralell Programmer mit einem Verstärker Baustein, weiss nicht mehr welchen ich da genommen habe.
    Die brenngeschwindigkeit kann mann dann doch nur noch in der Bascom Software einstellen aber wo ?

    Naja habe den nicht mehr programmierbaren Attiny nen Kumpel mitgegeben, der hat in der Firma ein Programmiergerät, wo man auf knopfdruck die Standarteinstellungen zurückbringt.

    Mein Spiegel läuft jetzt wunderbar, mit soft start. Es passte keine programmierzeile mehr in den Speicher. Das erste mal das ich einen Controller vollgeschrieben habe. Bei diesem Modell ja auch keine Kunst

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress