PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ich brauche mal (Nach)Hilfe



oderlachs
19.02.2013, 18:09
Hallo Freunde und Kenner der Materie !

Ich habe es selber nicht geglaubt, aber ich bin einfach mit einer "FOR TO" Schleife und einer "IF then" Enscheidung nicht fertig geworden.
Bevor ich den Source zeige, möchte ich schnell mal die Aufgabenstellung darlegen. Sie ist eigendlich auch aus dem Code ersichtlich.
Ich benögie für ein Alarmprojekt Zeit/Alarmgeber. Da ich noch einige Attiny13 zu liegen habe, wollte ich diese nutzbringend verwenden.
Programmieren tue ich diese auf einem Pollinboard, welches über ISP10 Kabel mit dem STK500 verbunden ist. Beim STK muss ich zuviel umstöpseln/verbinden bei den 8pol. Tinys.

Natürlich bekomme ich den Chip programmiert, aber nicht ganz so wie ich gern möchte. Die Schleifenzählung wird mit IF nicht ausgewertet, die LED (gegen GND geschaltet),die ich an Stelle von Alarmgebern/Leuchten/Sender beim Test benutze, blinkeln hin und her, aber sind nicht wie gewollt ständig an, bis die Entscheidung in der Zeitschleife sie ausschaltet, bzw ausschalten soll.
Drum hier ein SOS-Ruf meiner seits was habe ich falsch gemacht. Die Fuses sind richtig gesetzt, werde noch Foto anhängen.

Ich sege schon mal Danke an eventuelle Helfer !!!

Gerhard



'Alarmgeber mit ATTINY13
$regfile = "ATtiny13.dat"
$crystal = 9600000 'Interner 9,6Mhz Takt
$hwstack = 10 ' wert ??
$swstack = 10 ' wert ??
$framesize = 10 ' wert ??

'Konstanten festlegen
Const T_ALARM = 3 ' Zeit in Min.f ür aktive Sirene in ' Deutschland erlaubt: 3 Minuten
Const MINUTE = 60 ' 60x 1sec= wait1
DIM Flag as boolean
DIM cnt as byte ' Zählvariable
DIM cend as byte ' cend = Endzeit Zählschleife
'Pins konfigurieren
Config Pinb.0 = Output ' Ausgang 433MHz Sender

Config Pinb.1 = Output ' Ausgang Schaltstufe Sirene

Config PINB.2 = Output ' Ausgang RundumBlitzleuchte

Config PINB.3 = Input ' Eingang Alarmsensor
flag = False
if PINB.3
'Ports setzen
PINB.0 = 1
PINB.1 = 1
PINB.2 = 1
flag = True
cend = T_ALARM * MINUTE
for cnt = 1 to cend step 1
if cnt > 10 then PINB.0 = 0 'nach 10sec. Sender aus
wait 1
next cnt
end if
do
PINB.0 = 0 ' Funkverbindung weiter aus
PINB.1 = 0 ' Sirene aus
PINB.2 = flag ' Rundumblitzer weiter ein
loop

HeXPloreR
19.02.2013, 18:32
Hallo oderlachs,



Müßte bei If PINB.3 nicht ..." = 1 then" mit dazu.
Der Eingang sollte entprellt (in Software oder Hardware?) werden um Fehlalarme zu vermeiden.

Outputs sollten z.B. als PORTB.1 geschrieben sein. Also alle PINB.0-2 in PORTB ändern, besonders wichtig wenn man sie setzen möchte. B.3 ist okay.

Wenn die Schleife durch ist, landest Du in der do - loop Schleife - diese ist dann eine Sackgasse.

Ansonsten landest Du direkt nach dem flag = false setzen doch direkt in der do - loop Schleife - und gibst flag an PinB.2 (-welcher zu PORTb.2 werden sollte) weiter. Und dann bleibst Du auch in der Sackgasse - der Blitzer blitzt also nicht, weil flag = false (=0) ist.

Das step 1 benötigt man nicht, da automatisch mit +1 addiert wird.
Das cend kann man vorher berechnen lassen, da es Konstanten sind, die ggf manuel geändert wedren. Dieses cend kann also vor die Hauptschleife, die Du noch richtig einbauen mußt.
Nimm das do unten weg und setze es eine Zeile vor die If anweisung nach dem flag = false Befehl.

Das alles sollte zumindest eine Verbesserung bringen, wenn ich das richtig gesehen habe ;)

Viele Grüße

oderlachs
19.02.2013, 19:57
Vielen Dank , werde das alles mal berücksichtgen und ändern. Werde mal ganz klein anfangen, habe lange in Bascom nix mehr gemacht, aber ich werde doch wohl solch eine kleine Sache hinbekommen, so hoffe ich jedenfalls.
Irgendwie ist es auch komisch, nachdem ich das Testboard ausgeschaltet hatte und wieder weiter machen wollte ging gar nix mehr...
Habe jetzt das USB-ASP als ISP programmer angeschlossen, nun kann ich wenigstens wieder den Chip und die Fuses auslesen...
24585

Anbei noch die Fuseeinstellungen als Foto.
Vielen Dank

Gerhard

HeXPloreR
19.02.2013, 20:06
Ach Gerhard,

Die Fuses scheinen soweit richtig 9,6MHz ohne Division durch 8.

Viele Grüße

oderlachs
19.02.2013, 21:29
Hallo HexPlorer !
ja die Division habe ich rausgenommen, wollte mal das ganze langsamer machen, ob es dann geht. Ich gebe warscheinlich auf, tippe auf die Chips, mal lassen sie sich per ID auslesen mal nicht. Nicht mal das Ein und Ausschalten eines IO Pins lässt sich noch verwirklichen..irgendwas muss da wirklich spinnen, ich hoffe nicht ich.. ;)
Wenn nicht anders muss ich eben ein paar 2313 opfern, die ja damit total unterforder sind, aber was solls. ich will mich nicht noch Tage für dumm verkaufen lassen.
ich probiere nochmals weiter, werde das Ergebnis hier mitteilen. Auch werde ich mal die konkreten Spannungen kontrollieren, nicht das sich die Regelung verabschiedet hat, oder vieleicht Spannungsimpulse auf der Gleichspannung sind...

Gruss und Dank

Gerhard

Thomas$
19.02.2013, 21:41
hast du bei den programmer einstellungen autoverify drin? da wird wenigstens erkannt wenn beim flashen fehler auftreten

oderlachs
20.02.2013, 10:04
das einzige worüber Fehlermeldungen kommen , ist das Fehlen der eep-Datei ?? Die Programmereinstellungen siehe hier :
24590

Heute werde ich mal einen 2313 aufstecken und damit versuchen, nicht das mein Pollinboard 'nen Fehler hat.
Nachtrag : 2313 geht auch nicht, selbes Programm(Bascom) per STK500 den Chip programmiert, hurra es geht.
Nun ja da muss ich den Fehler im Pollinboard suchen....den Fehler werde ich hier aufzeigen.
Danke für alle Hilfe
Gerhard