Anzeige:

Atmel Mini Alarm Anlage

Hier finden sie die archivierten Beiträge des alten PHPBB Forums von www.loetstelle.net

Atmel Mini Alarm Anlage

Von bombel_locke am 19.03.2012 21:35

Hallo liebe Forumgemeinde.
Ich bin ein totaler Newbie und bräuchte mal Euere Hilfe zu dem o. g. Projekt.
Ich weiß nicht, ob das schonmal jemand gebaut hat, aber bei mir geht es nicht! Folgendes Problem: Ich habe mir die Amtel Tiny13 Platine angefertigt und den Attiny13 mit dem Code für die Mini-Alarmanlage http://www.loetstelle.net/projekte/tinyalarm/tinyalarm.php gebrannt (Fusebits habe ich nicht verändert!?).
1].include "tn13def.inc"

.def sreg_temp= r1
.def temp1= r16
.def FLAGS = r20
.def buzzer_counter=r21
.def led_counter=r22
.def pushbutton_counter = r23
.def exit_counter = r24
.def entry_counter = r25
.def wdt_counter = r26

.equ IO_PORT = PORTB
.equ IO_DDR = DDRB
.equ IO_PINS = PINB
.equ LED_PIN = 0
.equ BUZZER_PIN =2
.equ PUSHBUTTON_PIN = 3
.equ ALARM_PIN = 4

.equ FLAG_WDT = 0
.equ FLAG_PCI = 1
.equ FLAG_PUSHBUTTON_SHORT = 2
.equ FLAG_PUSHBUTTON_LONG = 3
.equ FLAG_ALARM_COUNTER = 4
.equ FLAG_EXIT_COUNTER = 5
.equ FLAG_ENTRY_COUNTER = 6
.equ FLAG_ALARM_ENABLED = 7
.equ pushbutton_max = 10
.equ pushbutton_short = 1
.equ pushbutton_long = 3
.equ entry_delay = 15
.equ exit_delay = 60
.equ alarm_duration = 60
.org $0000

rjmp main

.org WDTAddr
rjmp WDTHandler

.org PCI0Addr
rjmp PCIHandler

.org (int_vectors_size*2)

main:
ldi temp1,low(ramend)
out spl,temp1
clr buzzer_counter
clr led_counter
clr pushbutton_counter
clr exit_counter
clr entry_counter
clr wdt_counter


rcall init_io_port
rcall init_wdt
rcall init_pci

sei
endless:
sbrc FLAGS,FLAG_WDT
rcall wdt_flag_handler
nop

sbrc FLAGS,FLAG_pci
rcall pci_flag_handler
nop

sbrc FLAGS,FLAG_PUSHBUTTON_SHORT
rcall pushbutton_short_handler
nop

sbrc FLAGS,FLAG_PUSHBUTTON_LONG
rcall pushbutton_long_handler
nop

sbrc FLAGS,FLAG_EXIT_COUNTER
rcall flag_exit_counter_handler
nop
sbrc FLAGS,FLAG_ENTRY_COUNTER
rcall flag_entry_counter_handler
nop
ldi temp1,0b00110000
out mcucr,temp1
sleep

rjmp endless

wdt_flag_handler:
cbr flags,(1<<FLAG_WDT)

rcall led_pulse
ret


pci_flag_handler:
cbr flags,(1<<FLAG_PCI)
sbrc flags,FLAG_ALARM_ENABLED
rcall counter_entry

ret


flag_exit_counter_handler:

cbr flags,(1<<FLAG_EXIT_COUNTER)
sbr flags,(1<<FLAG_ALARM_ENABLED)
rcall led_short
ret

flag_entry_counter_handler:

cbr flags,(1<<FLAG_ENTRY_COUNTER)
rcall led_long
rcall buzzer_alarm
ret



pushbutton_short_handler:
cbr flags,(1<<FLAG_PUSHBUTTON_SHORT)
rcall counter_exit
rcall led_long

ret
pushbutton_long_handler:
cbr flags,(1<<FLAG_PUSHBUTTON_LONG)
clr entry_counter
clr exit_counter
cbr flags,(1<<FLAG_ALARM_ENABLED)|(1<<FLAG_ENTRY_COUNTER)|(1<<FLAG_EXIT_COUNTER)

rcall led_short
ret



init_io_port:
ldi temp1,(1<<LED_PIN)|(1<<BUZZER_PIN)
out IO_DDR,temp1
//enable pullups
ldi temp1,(1<<PUSHBUTTON_PIN)|(1<<ALARM_PIN)
out IO_PORT,temp1

ret



init_WDT: ldi temp1,(0<<WDRF)
out MCUSR,temp1
in temp1,WDTCR
ori temp1,(1<<WDE)|(1<<WDCE)
out WDTCR,temp1
ldi temp1,(1<<WDTIE)|(0<<WDE)|(0<<WDP3)|(1<<WDP2)|(1<<WDP1)|(0<<WDP0)
out WDTCR,temp1
ret

init_pci:
ldi temp1,(1<<ALARM_PIN)
out pcmsk,temp1
ldi temp1,(1<<PCIE)
out GIMSK,temp1


ret

led_pulse: cpi led_counter,$00
brne exit_pulse
cpi exit_counter,$00
brne do_pulse
sbrs flags,FLAG_ALARM_ENABLED
rjmp exit_pulse

inc wdt_counter
cpi wdt_counter,5
brne exit_pulse
clr wdt_counter

do_pulse:
sbi IO_PORT,LED_PIN
ldi temp1,100
delay: dec temp1
brne delay
cbi IO_PORT,LED_PIN
exit_pulse:
ret


wdthandler:
in sreg_temp,sreg
push temp1
sbr FLAGS,(1<<FLAG_WDT)
rcall buzzer_handler
brne exit_wdt_handler

rcall led_handler
rcall pushbutton_handler
rcall exit_counter_handler
rcall entry_counter_handler


exit_wdt_handler:
pop temp1
out sreg,sreg_temp
reti

exit_counter_handler:
cpi exit_counter,$00
breq exit_exit_counter_handler
dec exit_counter
brne exit_exit_counter_handler
sbr flags,(1<<FLAG_EXIT_COUNTER)
exit_exit_counter_handler:
ret

entry_counter_handler:
cpi entry_counter,$00
breq exit_entry_counter_handler
dec entry_counter
brne exit_entry_counter_handler
sbr flags,(1<<FLAG_ENTRY_COUNTER)
exit_entry_counter_handler:
ret



pushbutton_handler:
sbic IO_PINS,PUSHBUTTON_PIN
rjmp pushbutton_release
cpi pushbutton_counter,pushbutton_max
breq exit_pushbutton_handler
inc pushbutton_counter
exit_pushbutton_handler:
ret


pushbutton_release:
cpi pushbutton_counter,pushbutton_short
brlo exit_pushbutton_release
cpi pushbutton_counter,pushbutton_long
brlo do_pb_short
sbr flags,(1<<FLAG_PUSHBUTTON_LONG)
rjmp exit_pushbutton_release


do_pb_short:
sbr flags,(1<<FLAG_PUSHBUTTON_SHORT)


exit_pushbutton_release:
clr pushbutton_counter
ret

buzzer_handler:
cpi buzzer_counter,$00
breq buzzer_off
sbi IO_PORT,BUZZER_PIN
dec buzzer_counter




ret


buzzer_off: cbi IO_PORT,BUZZER_PIN
ret

led_handler:
cpi led_counter,$00
breq led_off
dec led_counter


sbi IO_PORT,LED_PIN

ret


led_off: cbi IO_PORT,LED_PIN
ret



PCIHandler: in sreg_temp,sreg
push temp1
sbr FLAGS,(1<<FLAG_PCI)


pop temp1
out sreg,sreg_temp
reti

buzzer_alarm:
ldi buzzer_counter,alarm_duration
ret
led_short:
ldi led_counter,1
ret
led_long:
ldi led_counter,3
ret



counter_exit:
ldi exit_counter,exit_delay
ret

counter_entry:
cpi entry_counter,$00
brne exit_counter_entry

exit_counter_entry:
ldi entry_counter,entry_delay
mov led_counter,entry_counter
ret1]
Leider gab es schon beim Compilieren die ersten Probleme z.B. (Zeilenumbruch). nachdem ich endlich diese Hürde geschafft habe, habe ich den Debugger gestartet und der bleibt mit einem gelben Pfeil bei "rjmp main" stehen. Habe leider keine Ahnung weshalb und bin - nachdem ich meinen ganzen freien Tag nun schon probiere - etwas entnervt! Kann mich jemand aufklären? Leider kann ich keine Progamme schreiben weder in C noch Assembler, brauche aber so eine Lösung für meine Katzenklappe mit RFID Zugang. Zeiten könnte ich wahrscheinlich selbst ändern. Hilfreich wäre für mich noch, wenn man den Taster zum Starten weglassen könne und stattdessen die Routine automatisch mit der Spannungsversorgung beginnt. Gibt es diese Platine http://www.loetstelle.net/projekte/tinydil/tinydil.php evtl noch?? Ich wäre wirklich über Hilfe sehr dankbar!
LG bombel_locke

Atmel Mini Alarm Anlage

Von bombel_locke am 21.03.2012 07:44

Hallo liebe Forumgemeinde.
Es gibt neues zu berichten. Habe ein Fehler auf meiner Platine gefunden. Nun funzt das Progamm. Wenn mir jetzt noch jemand sagen könnte, wie ich den Code ändern muss, damit der Progammablauf schon startet, sobald Spannung angelegt wird, also ohne Taster startet?
VG Armin

Anzeige: