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!
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!
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!
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.
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!
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
Input Kontrolle:Code:Zähler für die 10 Minuten laden Zähler für die 4 Sekunden auf NULL
Beleuchtung: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
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.
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!
Hallo Leute,
ich habe etz ein Funktionierendes Programm. Kann sich das mal jemand anugcken und Optimierungsvorschlaege machen?
Wie gesagt, mein erstes Programm.
Vielen Dank!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
Lesezeichen