Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
WinAVR / GCC alapszabályok:
1. Ha ISR-ben használsz globális változót, az legyen "volatile"
2. Soha ne érjen véget a main() függvény
3. UART/USART hibák 99,9% a rossz órajel miatt van
4. Kerüld el a -O0 optimalizációs beállítást minden áron
5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás
6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et
Bővebben: AVR-libc FAQ
Lapozás: OK   743 / 837
(#) csabeszq válasza kapu48 hozzászólására (») Aug 10, 2016 /
 
Nincs C alatt olyan kódolási sztenderd, mint java, vagy C++ alatt.

Úgy írod, ahogy jól esik, de egy projekten belül próbáld ugyanazt a formátumot végig tartani.
(#) kapu48 válasza csabeszq hozzászólására (») Aug 10, 2016 /
 
Köszönöm!

Végül a jobb olvashatóság kedvéért belekerültek a _ karakterek.
  1. void LCD_print_Char(char c);
  2. ...
  3. void LCD_println_Char(char c);
(#) Szabi1 hozzászólása Aug 11, 2016 /
 
Sziasztok! Nem tudja valaki, hogy miért irja ki ezt az avrdude? Egy arduino uno-val akartam felprogramozni egy ATMEGA8515-ost.

avrdude.PNG
    
(#) Sick-Bastard válasza Szabi1 hozzászólására (») Aug 12, 2016 / 1
 
Hibásan adtad meg a parancsot.
avrdude -P COM3 -b 19200 -c arduino -p m8515 -F flash:w:board.hex
-F helyett -U kell
avrdude -P COM3 -b 19200 -c arduino -p m8515 -U flash:w:board.hex
(#) Szabi1 válasza Sick-Bastard hozzászólására (») Aug 12, 2016 /
 
Köszönöm a segítséget! Volna itt még valami, kompilálni kellene egy assembly kódot, nem én írtam, csak módosítottam benne a portbiteket, és kéne egy hex amit felprogramoznák:
Továbbá azt hiszem hogy az eredeti kód 16 Mhz-re van írva, nekem 8Mhz-es quatzom van, ez számít-e, mert az UART-on kellene fogadja a jeleket!?

  1. /**** A P P L I C A T I O N   N O T E   ************************************
  2. *
  3. * Title                 : DMX512 reception library
  4. * Version               : v2.5
  5. * Last updated  : 29.11.06
  6. * Target                : Botex, SP1500-DMX [ATmega8515]
  7. * Clock                 : 16MHz
  8. *
  9. * written by hendrik hoelscher, www.hoelscher-hi.de
  10. ***************************************************************************
  11.  This program is free software; you can redistribute it and/or
  12.  modify it under the terms of the GNU General Public License
  13.  as published by the Free Software Foundation; either version2 of
  14.  the License, or (at your option) any later version.
  15.  
  16.  This program is distributed in the hope that it will be useful,
  17.  but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  19.  General Public License for more details.
  20.  
  21.  If you have no copy of the GNU General Public License, write to the
  22.  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  23.  
  24.  For other license models, please contact the author.
  25.  
  26. ;***************************************************************************/
  27.  
  28.  
  29. .include "m8515def.inc"
  30.  
  31. ;Register and Pin definitions
  32.  
  33. .def TempA = r16
  34. .def TempB= r17
  35. .def TempC= r18
  36. .def TempD= r3
  37. .def MainFlags= r19
  38. .def ErrFlags=r20
  39. .def StroboHeatH=r21
  40. .def StroboHeatL=r22
  41. .def HeatInc= r9
  42. .def DmxState= r23
  43. .def TCNT0H = r8
  44. .def null= r2
  45. .def SREG_buf= r10
  46.  
  47.  
  48. ;Mod by me
  49.  
  50. ;.equ LED=               PB3
  51. ;.equ CNTRL_LED=  PD7
  52. ;.equ Strobo=    PB7
  53.  
  54. .equ LED=                PD7
  55. .equ CNTRL_LED=  PE0
  56. .equ Strobo=     PA0
  57.  
  58.  
  59. ;Endmod
  60.  
  61.  
  62. .equ ONTIME= 800         ;Time the strobe is triggered
  63.  
  64. ;** vars in SRAM
  65.  
  66. .equ SPEEDraw=   0x61 ;Buffer for Speed
  67. .equ BRIGHTraw=  0x62 ;Buffer for Brightness
  68. .equ MODEraw=    0x63 ;Buffer for strobe mode
  69.  
  70. .equ SPEEDclcH=  0x64 ;Buffer for Speed
  71. .equ SPEEDclcL=  0x65
  72. .equ FIREclcH=   0x66 ;Buffer for Brightness
  73. .equ FIREclcL=   0x67 ;Buffer for Brightness
  74. .equ QUENCHclcH= 0x68 ;Buffer for Brightness
  75. .equ QUENCHclcL= 0x69 ;Buffer for Brightness
  76. .equ MODEclc=    0x6A ;Buffer for strobe mode
  77.  
  78. .equ ERRCODE=    0x6B ;error LED pattern
  79. .equ ERRprescaler= 0x6D ;prescaler for error indicator
  80. .equ RANDSEED=   0x70
  81.  
  82.  
  83. ;***** special flags
  84.  
  85. .equ  OVERHEAT          =0              ;Error Flags
  86. .equ  VALID_DMX         =1
  87. .equ  SIGNAL_COMING =2
  88. .equ  MANUAL            =4              ;use THIS for checking current mode!
  89. .equ  XOP_OFF           =5
  90. .equ  ZChigh            =6              ;for old board's polling
  91. .equ  REV_5_2           =7
  92.  
  93. .equ  doSPEED           =0              ;Main Flags
  94. .equ  doBRIGHT      =1
  95. .equ  doMODE            =2
  96. .equ  doIndicate        =3
  97. .equ  wasLOW            =4      ;used for single flash 
  98. .equ  DMXisSTANDBY      =5
  99. .equ  isREADY           =6
  100. .equ  doFLASH           =7
  101.  
  102. .equ  NORMAL_MODE       =0
  103. .equ  BLINDING_MODE =1
  104. .equ  RANDOM_MODE   =2
  105. .equ  SINGLE_FLASH  =3
  106. .equ  SYNC_MODE         =4             
  107.  
  108. ;interrupt vectors
  109.  
  110. .org 0
  111.        
  112.         rjmp reset                              ;reset vector address
  113.         rjmp zero_crossing              ;External Interrupt0 Vector Address
  114.         reti                                    ;External Interrupt1 Vector Address
  115.         reti                                    ;Input Capture1 Interrupt Vector Address
  116.         rjmp fire                               ;Output Compare1A Interrupt Vector Address
  117.         rjmp quench                             ;Output Compare1B Interrupt Vector Address
  118.         reti                                    ;Overflow1 Interrupt Vector Address
  119.         rjmp dmx_flash                  ;Overflow0 Interrupt Vector Address
  120.         reti                                    ;SPI Interrupt Vector Address
  121.         rjmp get_byte                   ;UART Receive Complete Interrupt Vector Address
  122.         reti                                    ;UART Data Register Empty Interrupt Vector Address
  123.         reti                                    ;UART Transmit Complete Interrupt Vector Address
  124.         reti                                    ;Analog Comparator Interrupt Vector Address
  125.         reti                                    ;External Interrupt2 Vector Address
  126.         reti                                    ;Output Compare0 Interrupt Vector Address
  127.         reti                                    ;EEPROM Interrupt Vector Address
  128.         reti                                    ;SPM complete Interrupt Vector Address
  129.         reti                                    ;SPM complete Interrupt Vector Address 
  130.  
  131. ;INIT
  132. reset:
  133. cli
  134.  
  135. ;Stack
  136.         ldi             TempA, high(RAMEND)
  137.         out             SPH,TempA
  138.         ldi             TempA, low(RAMEND)
  139.         out             SPL,TempA
  140.  
  141. ;***** WATCHDOG
  142.         wdr
  143.         ldi     tempA, (1<<WDE)|(1<<WDCE)
  144.         out     WDTCR, tempA
  145.         ldi     tempA, (1<<WDE)|(1<<WDCE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0) ;set TimeOut to 2.1s
  146.         out     WDTCR, tempA
  147.         wdr
  148.  
  149.        
  150. ;Mod by me     
  151.        
  152. ;***** set Ports
  153.  
  154.  
  155. ; PortA
  156. ;       clr     TempA                           ;clear TempA register 0x00
  157. ;       out             DDRA, TempA                     ;DDRA
  158.        
  159. ;       ser             TempA                           ; TempA equals to 0xFF
  160. ;       out             PortA, TempA            ;DIP-Switches with pullup
  161.        
  162. ; PortB
  163. ;       ldi             TempA, 0b11001000       ;0,1=invers_chck 3=LED 4=ZC 6,7=OUT
  164. ;       out             DDRB, TempA
  165. ;       ldi             TempA, 0b11111011
  166. ;       out             PortB, TempA
  167.  
  168. ; PortC
  169. ;       ldi             TempA, 0b00000000       ;0,1=DIP-switches
  170. ;       out             DDRC, TempA
  171. ;       ldi             TempA, 0b00000011
  172. ;       out             PortC, TempA
  173.  
  174. ; PortD
  175. ;       ldi             TempA, 0b10000000       ;Cntrl-LED
  176. ;       out             DDRD, TempA
  177. ;       ldi             TempA, 0b10000100
  178. ;       out             PortD, TempA
  179.  
  180. ; PortE
  181.         ;*unused*
  182. ;--------------------------------------------------------------------------------------
  183.  
  184.         ; PA0, PA1  for NPN out and PA2 for PNP out instead of PB5 PB6 for NPN and PB7 for PNP
  185.        
  186. ; PortA  OK
  187.         clr     TempA                           ;clear TempA register
  188.         ldi             TempA, 0b11111110
  189.         out             DDRA, TempA                     ;DDRA output except PA0 input
  190.         ldi             TempA, 0b11111111       ; PortA on
  191.         out             PortA, TempA           
  192.        
  193.        
  194.         ; PB0, PB1 i dont known (GROUNDED) PB3 ADC for heat check
  195.        
  196. ; PortB
  197.         ldi             TempA, 0b00000000       ;0,1=invers_chck 3=heat
  198.         out             DDRB, TempA                     ;all input
  199.         ldi             TempA, 0b11110111  ; no pullup for ADC
  200.         out             PortB, TempA
  201.  
  202.         ; PortC DIP Switches 1 to 8
  203.        
  204. ; PortC OK
  205.         ldi             TempA, 0b00000000      
  206.         out             DDRC, TempA
  207.         ser             TempA                           ; TempA equals to 0xFF
  208.         out             PortC, TempA            ;DIP-Switches with pullup
  209.  
  210.        
  211.         ;PortD PD0 (RXD), PD1 (TXD),  PD2 (RDM) for data I/O,  PD7 for green led
  212. ; PortD  OK
  213.         ldi             TempA, 0b10000100       ;LED
  214.         out             DDRD, TempA
  215.         ldi             TempA, 0b10001000
  216.         out             PortD, TempA
  217.  
  218.         ;PortE  PE0 for Red led, PE1 DIP SWITCH 10 and PE2 DIP SWITCH 9
  219. ; PortE  OK
  220.         ldi             TempA, 0b00000001
  221.         out             DDRE, TempA
  222.         ldi             TempA, 0b00000110
  223.         out             PortE, TempA
  224.        
  225. ;Endmod
  226. ;------------------------------------------------------------------------------------------
  227.  
  228.        
  229.        
  230.        
  231.        
  232.         clr             ErrFlags
  233.  
  234.   EEread_target:                                ;get target board
  235.         sbic    EECR, EEWE
  236.         rjmp    EEread_target
  237.         clr             TempA
  238.         out             EEARH, TempA
  239.         ldi             TempA, 2
  240.         out             EEARL, TempA
  241.         sbi             EECR, EERE
  242.         in              TempA, EEDR
  243.                
  244.         cpi             TempA, 1
  245.         breq    init_trgt                       ;old revision
  246.         cpi             TempA, 2
  247.         breq    new_board                       ;new revision
  248.         rjmp    get_target
  249.   new_board:
  250.         sbr             ErrFlags, (1<<REV_5_2)
  251.   init_trgt:
  252.  
  253. ; Timers       
  254.         clr             TempA
  255.         out             TCCR1A, TempA
  256.         ldi     TempA, (1<<CS11)        ;set counter1 @clock/8 frequency
  257.         out     TCCR1B, TempA
  258.         ldi     TempA, (1<<CS02)        ;set counter0 @clock/256 frequency
  259.         out     TCCR0, TempA                           
  260.         ldi     TempA, (1<<TOIE0)       ;enable Timer0 overflow interrupt
  261.         out     TIMSK, TempA
  262.  
  263. ; SPI
  264.         clr             TempA
  265.         out             SPCR, TempA                     ;disable SPI
  266.  
  267. ;ext interrupt 0 for phase zero-crossing control (just new boards!)
  268.         sbrs    ErrFlags, REV_5_2
  269.         rjmp    no_ext_int                      ;old board
  270.        
  271.         ldi     TempA, (1<<ISC01)       ;falling edge
  272.         out     MCUCR, TempA
  273.         ldi             TempA, (1<<INT0)        ;activate
  274.         out     GICR, TempA             ;              
  275.         ldi             TempA, (1<<INTF0)       ;clear interrupt0 flag
  276.         out     GIFR,  TempA
  277.  
  278. no_ext_int:
  279.                
  280. ;USART
  281.         ldi     TempA, 0x03                     ;set USART to 250 kbaud @ 16Mhz
  282.         out     UBRRL, TempA
  283.         ldi     TempA, 0x00
  284.         out     UBRRH, TempA
  285.         ldi     TempA, (1<<URSEL)|(3<<UCSZ0)|(1<<USBS) ; 8n2
  286.         out     UCSRC, TempA                    ;
  287.         in              TempA, UDR                      ;clear Uart Receive Interrupt Flag
  288.         clr             TempA
  289.         out             UCSRA, TempA            ;clear all error flags, disable U2X and MPCM
  290.         clr     DmxState
  291.  
  292. ; MODE SELECT          
  293.         rcall   get_opmode
  294.         sbrc    ErrFlags, MANUAL
  295.         rjmp    init_1                          ;don't init in manual mode
  296.         ldi             TempA, (1<<RXCIE)|(1<<RXEN) ;enable Uart RX IRQ & Uart RXD in DMX mode
  297.         out             UCSRB, TempA
  298.    init_1:     
  299.         cbi     PortD, LED
  300.        
  301. ; set Register
  302.         ldi     MainFlags, (1<<DMXisSTANDBY)|(1<<isREADY)|(1<<doSPEED)|(1<<doBRIGHT)|(1<<doMODE)       
  303.         ldi     StroboHeatL, 5
  304.         clr             StroboHeatH
  305.         clr     HeatInc
  306.         clr     null
  307.         sts             SPEEDraw, null
  308.         sts             BRIGHTraw, null
  309.         sts             MODEraw,  null
  310.         ldi     TempA, 3
  311.         sts             ERRcode, TempA
  312.         ldi             TempA, 4
  313.         sts             ERRprescaler, TempA
  314.  
  315.         wdr
  316.  
  317.         wdr                                                                     ;Watchdog-Reset
  318.         sei
  319.  
  320. ;****************************** main (calculations) *****************************
  321.  
  322. main:
  323.                 sbrc    MainFlags, doSPEED              ;should calc new speed?
  324.                 rjmp    calc_speed
  325.                 sbrc    MainFlags, doBRIGHT             ;should calc new brightness?
  326.                 rjmp    calc_brightness
  327.                 sbrc    MainFlags, doMODE               ;should calc new mode?
  328.                 rjmp    calc_mode
  329.                 sbrc    MainFlags, doINDICATE   ;error indicator and heat cntrl (called by zc @10Hz)
  330.                 rjmp    indicate
  331.  
  332.                 sbrc    ErrFlags, REV_5_2
  333.                 rjmp    main                                    ;new boards need no polling
  334.                
  335.                 ;detect ZC !
  336.                 cli
  337.                 sbis    PinD,3                                  ;ZC high?
  338.                 rjmp    check_zc                                ;no
  339.                 sbr             ErrFlags, (1<<ZChigh)   ;yes  ->neg. half wave
  340.                 rjmp    exit_poll
  341.            check_zc:
  342.                 sbrs    ErrFlags, ZChigh                ;was high before and now low -> zc!!
  343.                 rjmp    exit_poll                               ;no (pos. half wave)
  344.                 cbr             ErrFlags, (1<<ZChigh)   ;wait for next neg. half wave
  345.                 rcall   zero_crossing                   ;ZC detected!!
  346.                 rjmp    main           
  347.            exit_poll:
  348.                 sei
  349.                 rjmp    main
  350.  
  351.  
  352. ;____________________________________________________________________________________
  353.  
  354.         calc_speed:
  355.                 cbr             MainFlags, (1<<doSPEED)
  356.  
  357.                 lds             TempA,  MODEclc
  358.                 cpi             TempA,  SINGLE_FLASH
  359.                 breq    create_flash
  360.                 cpi             TempA,  BLINDING_MODE
  361.                 breq    blinding_speed
  362.                 cpi             TempA,  RANDOM_MODE
  363.                 breq    random_speed
  364.  
  365.  
  366.    normal_speed:  
  367.                 lds             TempA,  SPEEDraw
  368.  
  369.                 cpi             TempA, 5                                ;val <= 5 -> stand by
  370.                 brsh    spd_1
  371.                 sbr             MainFlags, (1<<DMXisSTANDBY)
  372.                 rjmp    main
  373.            spd_1:
  374.                 subi    TempA, 5                                ;range: 0-250 (1-14Hz)
  375.                 ldi             ZH, high(flash_rate*2)
  376.                 ldi             ZL, low(flash_rate*2)
  377.                 add             ZL, TempA
  378.                 adc             ZH, null
  379.                 add             ZL, TempA
  380.                 adc             ZH, null
  381.                 lpm             TempA,  Z+                              ;get flash rate
  382.                 lpm             TempB, Z
  383.      spd_finish:
  384.                 inc             TempB
  385.                 neg             TempA                                   ;clc T0 offset
  386.                 cli                                                             ;atomic operation
  387.                 sts             SPEEDclcL, TempA
  388.                 sts             SPEEDclcH, TempB
  389.                 cp              TempB, TCNT0H                   ;soft speed blending
  390.                 brsh    spd_f1
  391.                 mov             TCNT0H, TempB                   ;atomic write  
  392.                 out             TCNT0, TempA
  393.            spd_f1:
  394.             sei
  395.                 cbr             MainFlags, (1<<DMXisSTANDBY)    
  396.                 rjmp    main
  397.  
  398.        
  399.         create_flash:
  400.                 lds             TempA,  SPEEDraw
  401.                 cpi             TempA,  128
  402.                 brsh    rq_flash
  403.                 sbr             MainFlags, (1<<wasLOW)
  404.                 rjmp    main
  405.            rq_flash:
  406.                 sbrs    MainFlags, wasLOW               ;flash only, when ch was low before!
  407.                 rjmp    main
  408.                 cbr             MainFlags, (1<<wasLOW)
  409.                 sbr             MainFlags, (1<<doFlash)
  410.                 rjmp    main
  411.  
  412.        
  413.         random_speed:                                                           ;use SPEEDraw in TimerISR
  414.                 lds             TempA,  SPEEDraw
  415.                 cpi             TempA, 5                                                ;val <= 5 -> stand by
  416.                 brsh    rnd_1
  417.                 sbr             MainFlags, (1<<DMXisSTANDBY)
  418.                 rjmp    main
  419.        rnd_1:
  420.                 ldi             TempB,  high(3700)
  421.                 ldi             TempA, low(3700)                                ;use ~16.8Hz as base freq in random mode
  422.                 rjmp    spd_finish
  423.  
  424.  
  425.         blinding_speed:
  426.                 lds             TempA,  SPEEDraw
  427.                 cpi             TempA,  64
  428.                 brsh    bs_1
  429.                 sbr             MainFlags, (1<<DMXisSTANDBY)    ;shut down
  430.                 rjmp    main
  431.            bs_1:
  432.             cpi         TempA,  96
  433.                 brsh    bs_2
  434.                 ldi             TempB,  high(4464)                              ;14Hz
  435.                 ldi             TempA, low(4464)
  436.                 rjmp    spd_finish     
  437.                
  438.            bs_2:
  439.             cpi         TempA,  128
  440.                 brsh    bs_3
  441.                 ldi             TempB,  high(4167)
  442.                 ldi             TempA, low(4167)                                ;15Hz
  443.                 rjmp    spd_finish
  444.                
  445.            bs_3:
  446.             cpi         TempA,  160
  447.                 brsh    bs_4
  448.                 ldi             TempB,  high(3906)
  449.                 ldi             TempA, low(3906)                                ;16.6Hz
  450.                 rjmp    spd_finish
  451.                
  452.            bs_4:
  453.             cpi         TempA,  192
  454.                 brsh    bs_5
  455.                 ldi             TempB,  high(3125)
  456.                 ldi             TempA, low(3125)                                ;20Hz
  457.                 rjmp    spd_finish
  458.                
  459.            bs_5:
  460.             cpi         TempA,  224
  461.                 brsh    bs_6
  462.                 ldi             TempB,  high(2500)
  463.                 ldi             TempA, low(2500)                                ;25Hz
  464.                 rjmp    spd_finish
  465.            
  466.        bs_6:
  467.                 ldi             TempB,  high(1250)
  468.                 ldi             TempA, low(1250)                                ;50Hz
  469.                 rjmp    spd_finish
  470.            
  471. ;___________________________________________________________________________________________________
  472.                                                                                
  473.         calc_brightness:
  474.                 cbr             MainFlags, (1<<doBRIGHT)
  475.                 rcall   calc_heatInc                    ;calc new inc val. for heat simulation
  476.  
  477.                 lds             TempA, BRIGHTraw
  478.                 cpi             TempA, 5                                ;val <= 5 -> stand by
  479.                 brsh    brt_1
  480.                 sbr             ErrFlags, (1<<XOP_OFF)  ;standby if <5
  481.                 rjmp    main
  482.            brt_1:
  483.                 cbr             ErrFlags, (1<<XOP_OFF)
  484.                 ldi             ZH, high(firing_curve*2);set pointer to base address
  485.                 ldi             ZL, low(firing_curve*2)
  486.                 add             ZL, TempA
  487.                 adc             ZH, null
  488.                 add             ZL, TempA
  489.                 adc             ZH, null
  490.                 lpm             TempA, Z+                               ;load brightness
  491.                 lpm             TempB, Z                       
  492.  
  493.                 cli                                                             ;atomic operation
  494.                 sts             FIREclcL, TempA                
  495.                 sts             FIREclcH, TempB
  496.  
  497.                 ldi             TempC, high(ONTIME)             ;calc quench time
  498.                 mov             TempD, TempC
  499.                 ldi             TempC, low(ONTIME)
  500.                 add             TempA, TempC
  501.                 adc             TempB, TempD
  502.                 sts             QUENCHclcL, TempA
  503.                 sts             QUENCHclcH, TempB
  504.                 sei    
  505.                 rjmp    main
  506.  
  507.  
  508.         calc_heatInc:
  509.                 lds             TempA, BRIGHTraw
  510.                 swap    TempA
  511.                 lsr             TempA
  512.                 lsr             TempA
  513.                 andi    TempA, 0b00000011
  514.                 inc             TempA
  515.                 inc             TempA
  516.                 mov     HeatInc,        TempA
  517.                 ret
  518.  
  519. ;_______________________________________________________________________________
  520.  
  521.         calc_mode:
  522.                 cbr             MainFlags, (1<<doMODE)
  523.  
  524.                 lds             TempA, MODEraw
  525.                 cpi             TempA, 200
  526.                 brsh    synchronize
  527.                 cpi             TempA, 150
  528.                 brsh    single
  529.                 cpi             TempA, 100
  530.                 brsh    random
  531.                 cpi             TempA, 50
  532.                 brsh    blinder
  533.                 ldi             TempB, NORMAL_MODE                              ;0-63 -> normal mode
  534.                 rjmp    mode_finish
  535.            random:
  536.                 sts             RANDSEED, TempA                                 ;use raw mode val as new random seed
  537.             ldi         TempB, RANDOM_MODE
  538.                 rjmp    mode_finish
  539.            blinder:
  540.             ldi         TempB, BLINDING_MODE                    ;64-127 -> Blinder
  541.                 rjmp    mode_finish
  542.            single:
  543.             ldi         TempB, SINGLE_FLASH                             ;128-190 -> single flash
  544.                 sbr             MainFlags, (1<<DMXisSTANDBY)    ;disable T0-speed
  545.                 rjmp    mode_finish
  546.            synchronize:                                                         ;192-255 -> sync multiple Strobos
  547.                 ldi             TempB, SYNC_MODE
  548.  
  549.            mode_finish:
  550.             lds         TempA, MODEclc
  551.                 cp              TempA, TempB
  552.                 breq    mode_exit
  553.             sts         MODEclc, TempB
  554.                 cpi             TempB, SYNC_MODE
  555.                 breq    mode_sync
  556.                 sbr             MainFlags, (1<<doSPEED)                 ;eval new speeds
  557.            mode_exit:
  558.                 rjmp    main
  559.                
  560.        mode_sync:
  561.                 ldi             TempA, 1
  562.                 cli
  563.                 mov             TCNT0H,TempA                                    ;force instant flash (and get in defined state)
  564.                 ser             TempA
  565.                 out             TCNT0, TempA
  566.                 sei
  567.                 rjmp    main
  568.  
  569.        
  570. ;_______________________________________________________________________________
  571.  
  572.         indicate:
  573.                 cbr             MainFlags, (1<<doINDICATE)
  574.                
  575.                 ldi             TempA, 200                                              ;check restart point
  576.                 cp              StroboHeatL, TempA
  577.                 cpc             StroboHeatH, null
  578.                 brlo    ind_go
  579.                 cpi             StroboHeatH, 2                                  ;check shut down point
  580.                 brsh    ind_stop
  581.           ind_ret:
  582.                 ldi             TempA, 3
  583.                 cp              StroboHeatL, TempA
  584.                 cpc             StroboHeatH, null
  585.                 brlo    ind_1                                          
  586.                 sub             StroboHeatL, TempA
  587.                 sbc             StroboHeatH, null
  588.                                
  589.            ind_1:
  590.            ;ErrorLED
  591.                 lds             TempA, ERRcode
  592.                
  593.                 sbi     PortD, LED
  594.                 sbrc    TempA, 0                                                ;if 1st bit HI
  595.                 cbi     PortD, LED
  596.  
  597.             lsr         TempA
  598.                 cpi             TempA, 1
  599.                 brne    no_ind   
  600.                        
  601.         ;wenn durchrotiert (ERRpos = 0)
  602.                 ldi             TempA, 0b10000000                               ;load empty pattern
  603.                 sbic    UCSRB, RXEN                                     ;if manual mode -> no DMX indication           
  604.                 sbrc    ErrFlags, VALID_DMX
  605.                 rjmp    dmx_ok
  606.                 ldi             TempA, 0b10000101                               ;load specific error codes
  607.                 sbrs    ErrFlags, SIGNAL_COMING
  608.                 ldi             TempA, 0b10000001
  609.                 rjmp    dmx_nok
  610.            dmx_ok:
  611.             wdr                                                                         ;reset watchdog
  612.            dmx_nok:
  613.                 sbrc    ErrFlags, OVERHEAT
  614.                 ser             TempA
  615.                 cbr     ErrFlags, (1<<VALID_DMX)|(1<<SIGNAL_COMING)
  616.  
  617.            no_ind:
  618.                 sts             ERRcode, TempA
  619.                 rjmp    main                                           
  620.  
  621.            ind_go:                                             
  622.                 sbrc    ErrFlags, OVERHEAT
  623.                 cbr             MainFlags, (1<<doFlash)                 ;cancel flash request if restart
  624.                 cbr             ErrFlags, (1<<OVERHEAT)                 ;strobo is ready again
  625.                 rjmp    ind_ret
  626.            ind_stop:
  627.                 sbr             ErrFlags, (1<<OVERHEAT)                 ;strobo is too hot -> shut down
  628.                 rjmp    ind_ret
  629.  
  630. ;________________________________________________________________________________
  631.  
  632.         global_mode:
  633.                 ;MANUAL/DMX-SELECT
  634.             rcall       get_opmode                                              ;get current operating mode
  635.                 sbrc    ErrFlags, MANUAL                                ;manual mode selected?
  636.                 rjmp    man_mode                                                ; yes
  637.                 sbic    UCSRB, RXEN                                             ;new in DMX mode?
  638.                 ret                                                                             ; no
  639.                 ldi             TempA, (1<<RXCIE)|(1<<RXEN)     ;enable Uart RX IRQ & Uart RXD
  640.                 out             UCSRB, TempA
  641.                 ret
  642.                                
  643.           man_mode:
  644.                 out             UCSRB, null                                             ;disable USART
  645.  
  646.                 ;CHOOSE PARAMETERS
  647.                 rcall   get_address
  648.                 lds             TempB, MODEraw
  649.                 cp              TempB, XL                                               ;have DIP settings changed?
  650.                 breq    exit_man                                                ;no...
  651.                 sts             MODEraw, XL                                             ;save new val
  652.                 mov             TempB, XL
  653.  
  654. ;       (->Speed)
  655.                 andi    TempB, 0b00001111                               ;mask lower nibble
  656.  
  657.                 cpi             TempB, 0
  658.                 breq    man_single_flash
  659.                 cpi             TempB, 15
  660.                 breq    man_blind
  661.                 inc             TempB
  662.                 push    TempC
  663.                 ldi             TempC, 16
  664.                 mul             TempB, TempC                                    ;expand val
  665.                 pop             TempC
  666.                 mov             TempB, r0
  667.                 subi    TempB, -10                                              ;max speed
  668.                 sts             SPEEDraw, TempB                                 ;store new val 
  669.                 sbr             MainFlags, (1<<doSpeed)                 ;calc new speed in main
  670.                 rjmp    dimm_man
  671.                
  672.            man_single_flash:
  673.             sbr         MainFlags, (1<<doFlash)|(1<<DMXisStandBy) ;request flash
  674.                 rjmp    dimm_man
  675.  
  676.            man_blind:
  677.                 ldi             TempB,  (high(2500) +1)
  678.                 mov             TCNT0H, TempB
  679.                 ldi             TempB, low(2500)                                ;25Hz
  680.                 neg             TempB                                                   ;clc T0 offset
  681.                 cli
  682.                 sts             SPEEDclcL, TempB
  683.                 sts             SPEEDclcH, TCNT0H      
  684.                 out             TCNT0, null
  685.                 sei
  686.                 cbr             MainFlags, (1<<DMXisSTANDBY)   
  687.                                
  688. ;   (->Brightness)
  689.            dimm_man:
  690.             andi        XL, 0b11110000                                  ;mask higher nibble
  691.                 subi    XL, -10                                                 ;prevent black out
  692.                 sts             BRIGHTraw, XL                                   ;store new val 
  693.                 sbr             MainFlags, (1<<doBright)                ;calc new brightness in main
  694.                
  695.            exit_man:
  696.                 ret    
  697.  
  698.  
  699. ;****************************** Fire Timing *************************************
  700.  
  701. fire:                          
  702.                 cbi             PortA,  Strobo                          ;FIRE!
  703.                 reti
  704.  
  705.  
  706. quench:
  707.                 in      SREG_buf, SREG
  708.                 push    TempA
  709.  
  710.                 sbi             PortA,  Strobo                          ;quench
  711.  
  712.                 in              TempA,   TIMSK                          ;disable interrupt
  713.                 cbr             TempA,   (1<<OCIE1A)|(1<<OCIE1B)
  714.                 out             TIMSK,   TempA 
  715.    
  716.                 sbr             MainFlags, (1<<isREADY)         ;Ready...
  717.        
  718.                 pop             TempA
  719.                 out     SREG, SREG_buf 
  720.                 reti
  721.  
  722.  
  723. ;****************************** zero crossing ***********************************
  724.  
  725. zero_crossing:
  726.                 in      SREG_buf, SREG
  727.                 push    TempA
  728.                 push    TempB
  729.  
  730.                 sbrs    MainFlags, doFLASH                      ;flash request?
  731.                 rjmp    exit_zc                                         ; no...
  732.                 ;set up new flash
  733.                 sbrc    ErrFlags, OVERHEAT                      ;is strobo too hot?
  734.                 rjmp    exit_zc                                         ; no...
  735.                 sbrs    MainFlags, isREADY                      ;is strobo ready to fire?
  736.                 rjmp    exit_zc                                         ; no...
  737.  
  738.                 cbr             MainFlags, (1<<doFlash)|(1<<isREADY) ;quit flags
  739.  
  740.                 add             StroboHeatL, HeatInc            ;increase heat!
  741.                 adc             StroboHeatH, null
  742.  
  743.                 lds             TempB,   FIREclcH                       ;set firing angle
  744.                 lds             TempA,   FIREclcL
  745.                 out             OCR1AH,  TempB 
  746.                 out             OCR1AL,  TempA
  747.  
  748.                 lds             TempB,   QUENCHclcH                     ;set quench angle
  749.                 lds             TempA,   QUENCHclcL
  750.                 out             OCR1BH,  TempB
  751.                 out             OCR1BL,  TempA
  752.  
  753.                 out             TCNT1H,  null                           ;clear counter
  754.                 out             TCNT1L,  null
  755.  
  756.                 in              TempB,   TIFR                           ;clear irq flags
  757.                 sbr             TempB,   (1<<OCF1A)|(1<<OCF1B)
  758.                 out             TIFR,    TempB
  759.  
  760.                 in              TempB,   TIMSK                          ;enable interrupts
  761.                 sbr             TempB,   (1<<OCIE1A)|(1<<OCIE1B)
  762.                 out             TIMSK,   TempB
  763.  
  764.         exit_zc:
  765.                 lds             TempB,   ERRprescaler
  766.                 dec             TempB
  767.                 brne    zc_finish
  768.                 sbr             MainFlags, (1<<doINDICATE)      ;error indicator and heat cntrl
  769.                 ldi             TempB, 4                                        ;10Hz
  770.                 zc_finish:
  771.                 sts             ERRprescaler, TempB
  772.                 rcall   global_mode                                     ;has global mode changed?
  773.                 pop             TempB
  774.                 pop             TempA
  775.                 out     SREG, SREG_buf 
  776.                 reti
  777.  
  778. ;****************************** DMX-Flashrate ***********************************
  779. dmx_flash:
  780.                 in      SREG_buf, SREG
  781.                 push    ZH
  782.                 push    ZL
  783.                 push    TempB
  784.        
  785.                 dec             TCNT0H                                  ; decrement counter extension
  786.                 brne    exit_dflash
  787.                
  788.                 lds             TempB, SPEEDclcL                ; set nxt flash time
  789.                 out             TCNT0, TempB
  790.                 lds             TCNT0H, SPEEDclcH
  791.                
  792.                 sbrc    MainFlags, DMXisSTANDBY ; if standby -> no flash
  793.                 rjmp    exit_dflash
  794.                
  795.                 lds             TempB, MODEclc
  796.                 cpi             TempB, RANDOM_MODE
  797.                 brne    req_dflash                              ; request flash if not in random mode
  798.                
  799.                
  800.                 ldi             ZH, high(random_table*2);set pointer to base address
  801.                 lds             ZL, RANDSEED
  802.                 lpm             TempB, Z+                               ;load brightness
  803.                 sts             RANDSEED, ZL
  804.                
  805.                 lds             ZL, SPEEDraw   
  806.                 lsr             ZL             
  807.                 cp              ZL, TempB
  808.                 brlo    exit_dflash    
  809.  
  810.     req_dflash:
  811.                 sbrs    ErrFlags, XOP_OFF
  812.                 sbr             MainFlags, (1<<doFlash) ; flash request
  813.  
  814.         exit_dflash:
  815.                 pop             TempB
  816.                 pop             ZL
  817.                 pop             ZH
  818.                 out     SREG, SREG_buf 
  819.                 reti
  820.  
  821.                
  822. ;****************************** Empfang *****************************************
  823.  
  824. get_byte:
  825.                 in      SREG_buf, SREG
  826.                 push    TempA
  827.                 push    TempB
  828.                
  829.                 in              TempA, UCSRA
  830.                 in              TempB, UDR
  831.                
  832.                 sbr     ErrFlags, (1<<SIGNAL_COMING);message for indicator...          
  833.  
  834.                 sbrc    TempA,DOR                               ;check for overrun -> wait for reset
  835.                 rjmp    overrun
  836.  
  837.                 sbrc    TempA, FE                               ;check 1st stop bit
  838.                 rjmp    gb_break
  839.                
  840.                 cpi             DmxState, 1                     ;check for startbyte (else frame error -> reset)
  841.                 breq    startbyte      
  842.  
  843.                 cpi     DmxState, 2                     ;check for start adress
  844.                 breq    startadr
  845.  
  846.                 cpi     DmxState, 3                    
  847.                 breq    get_speed
  848.  
  849.                 cpi             DmxState, 4
  850.                 breq    get_brightness
  851.  
  852.                 cpi             DmxState, 5
  853.                 breq    get_mode
  854.  
  855.                 clr             DmxState                                ;wait for break
  856.         exit_dmx_receive:      
  857.                 pop             TempB
  858.                 pop             TempA
  859.                 out     SREG, SREG_buf 
  860.                 reti           
  861.  
  862.         startbyte:
  863.                 tst     TempB                                   ;if null, then Startbyte
  864.                 brne    overrun
  865.                
  866.                 inc     DmxState                                ;next -> start address
  867.                
  868.                 rcall   get_address                             ;read start address
  869.            
  870.                 cp              XL, null                                ;Startadresse = 0 is nich!
  871.                 cpc     XH, null
  872.                 brne    exit_dmx_receive       
  873.        
  874.             clr         DmxState                                ;quit receive routine
  875.                 sts             BRIGHTraw, null             ;set brightness to null
  876.                 sbr             MainFlags, (1<<doBRIGHT) ;calc new speed in main               
  877.             rjmp        exit_dmx_receive
  878.  
  879.         startadr:
  880.                 sbiw    XH:XL, 1
  881.                 brne    exit_dmx_receive
  882.                 inc     DmxState                                ;next-> Byte-Evaluation
  883.  
  884.         get_speed:
  885.                 inc     DmxState                                ;next channel
  886.                 lds     TempA, SPEEDraw                 ;load saved speed
  887.                 cp              TempA, TempB                    ;has changed?
  888.                 breq    exit_dmx_receive
  889.                 sts             SPEEDraw, TempB                 ;store new val 
  890.                 sbr             MainFlags, (1<<doSpeed) ;calc new speed in main
  891.                 rjmp    exit_dmx_receive
  892.        
  893.         get_brightness:
  894.                 inc     DmxState                                ;next channel
  895.                 lds     TempA, BRIGHTraw                ;load saved brightness
  896.                 cp              TempA, TempB                    ;has changed?
  897.                 breq    exit_dmx_receive
  898.                 sts             BRIGHTraw, TempB                ;store new val 
  899.                 sbr             MainFlags, (1<<doBRIGHT) ;calc new brightness in main
  900.                 rjmp    exit_dmx_receive
  901.  
  902.         get_mode:
  903.                 clr             DmxState
  904.                 sbr     ErrFlags, (1<<VALID_DMX);message for indicator...
  905.                 lds             TempA, MODEraw
  906.                 cp              TempA, TempB
  907.                 breq    exit_dmx_receive
  908.                 sts             MODEraw, TempB                  ;store new val
  909.                 sbr             MainFlags, (1<<doMODE)  ;calc new mode in main
  910.                 rjmp    exit_dmx_receive
  911.                
  912.         gb_break:
  913.                 cbi             UCSRA,FE                                ;clear frame-error flag
  914.                 tst             TempB                                   ;byte must be zero (88µs LO)
  915.                 brne    gb_break1
  916.                 ldi     DmxState, 1                             ;next -> control of start byte
  917.            gb_break1:
  918.                 rjmp    exit_dmx_receive
  919.  
  920.         overrun:
  921.                 clr     DmxState                                ;wait for framing error
  922.                 cbi             UCSRA,DOR                               ;clear overrun flag !!
  923.                 rjmp    exit_dmx_receive
  924.                
  925.  
  926. ;****************************** DIP states ****************************************
  927. get_address:
  928.                 cli                                                             ;atomic operation
  929.                 sbic    PinB, PB0                               ;this bridge is open in inverted strobes!
  930.                 rjmp    ga_invert                               ;get inverted start address
  931.                 in              XL, PinC                                ;Einlesen der Startadresse             
  932.                 com             XL                                              ;Invertierung
  933.                 clr             XH
  934.                 sbis    PinE, PE2                               ;9.address bit
  935.                 inc             XH
  936.                 reti
  937.           ga_invert:
  938.                 clr             XH
  939.                 clr             XL
  940.                 sbis    PinC,PC1                                ;9th bit
  941.                 inc             XH
  942.                 sbis    PinC,PC2
  943.                 sbr             XL, (1<<7)
  944.                 sbis    PinC,PC3
  945.                 sbr             XL, (1<<6)
  946.                 sbis    PinC,PC4
  947.                 sbr             XL, (1<<5)
  948.                 sbis    PinC,PC5
  949.                 sbr             XL, (1<<4)
  950.                 sbis    PinC,PC6
  951.                 sbr             XL, (1<<3)
  952.                 sbis    PinC,PC7
  953.                 sbr             XL, (1<<2)
  954.                 sbis    PinE,PE2
  955.                 sbr             XL, (1<<1)
  956.                 sbis    PinE,PE1
  957.                 sbr             XL, (1<<0)             
  958.                 reti
  959.  
  960.  
  961. get_opmode:                                                             ;operating mode
  962.                 cli                                                             ;atomic operation
  963.                 cbr             ErrFlags, (1<<MANUAL)  
  964.                 sbic    PinB, PB0                               ;this bridge is open in inverted strobes!
  965.                 rjmp    gopm_invert                             ;get inverted start address
  966.                 sbis    PinE, PE1
  967.                 sbr             ErrFlags, (1<<MANUAL)
  968.                 reti
  969.       gopm_invert:
  970.                 sbis    PinC, PC0
  971.                 sbr             ErrFlags, (1<<MANUAL)
  972.                 reti
  973.                
  974.  
  975.  
  976. ;****************************** check Revision *****************************************
  977.  
  978. .equ poll_HI  =0;
  979. .equ irq_HI   =1;
  980.  
  981. get_target:
  982.                 clr     R20
  983.                 ldi     R18, 50        
  984.                 ldi     R19, 50
  985.  
  986.         gt_loop:                               
  987.                 ldi     R16, $FF                                        ; make 16Hz flashing
  988.   trgt1:ldi     R17, $C4
  989.   trgt2:                                                                ; chck zc-source
  990.         sbis    PinB, 4                                 ; Poll pin HI?
  991.                 rjmp    poll_low
  992.                 sbr     R20, (1<<poll_HI)
  993.        ret_poll:
  994.                 sbis    PinD, 3                                 ; irq pin HI?
  995.                 rjmp    irq_low
  996.                 sbr     R20, (1<<irq_HI)
  997.            ret_irq:
  998.         dec     R17
  999.         brne    trgt2
  1000.                 wdr
  1001.         dec     R16
  1002.         brne    trgt1
  1003.          
  1004.  
  1005.                 sbis    PortD,LED                               ;blink
  1006.                 rjmp    trgt_off
  1007.                 cbi             PortD,LED
  1008.                 cbi             PortE,CNTRL_LED
  1009.                 rjmp    gt_loop
  1010.            trgt_off:
  1011.                 sbi     PortD,LED
  1012.                 sbi             PortE,CNTRL_LED
  1013.                 rjmp    gt_loop
  1014.                
  1015.                 poll_low:
  1016.             sbrs        R20, poll_HI
  1017.                 rjmp    ret_poll
  1018.                 cbr             R20, (1<<poll_HI)       ; zc happened
  1019.                 dec             R18                                     ; dec poll zc counter
  1020.                 brne    ret_poll
  1021.                 ldi             TempA, 1
  1022.                 rjmp    TARGETwrite                     ; old board detected
  1023.  
  1024.                 irq_low:
  1025.                 sbrs    R20, irq_HI
  1026.                 rjmp    ret_irq
  1027.                 cbr             R20, (1<<irq_HI)        ; zc happened
  1028.                 dec             R19                                     ; dec irq zc counter
  1029.                 brne    ret_irq
  1030.                 ldi             TempA, 2                        ; new board detected
  1031.  
  1032.            TARGETwrite:
  1033.                 sbic    EECR, EEWE
  1034.                 rjmp    TARGETwrite
  1035.                 clr             TempB
  1036.                 out             EEARH, TempB
  1037.                 ldi             TempB, 2
  1038.                 out             EEARL, TempB
  1039.                 out             EEDR, TempA
  1040.                 sbi             EECR, EEMWE
  1041.                 sbi             EECR, EEWE
  1042.                
  1043.                 rjmp    reset
  1044.  
  1045.            
  1046.  
  1047.  
  1048. nix: rjmp nix
  1049.  
  1050.  
  1051. firing_curve:                              ;firing table for linearization of brightness
  1052. .dw 17963, 17625, 17395, 17215, 17066, 16936, 16821, 16716, 16621, 16533, 16450, 16372, 16299, 16230, 16163, 16100
  1053. .dw 16039, 15981, 15924, 15870, 15817, 15766, 15717, 15668, 15621, 15576, 15531, 15487, 15445, 15403, 15362, 15322
  1054. .dw 15283, 15244, 15206, 15169, 15132, 15096, 15060, 15025, 14991, 14957, 14923, 14890, 14858, 14825, 14793, 14762
  1055. .dw 14731, 14700, 14670, 14640, 14610, 14580, 14551, 14522, 14494, 14465, 14437, 14409, 14382, 14354, 14327, 14300
  1056. .dw 14273, 14247, 14220, 14194, 14168, 14142, 14117, 14091, 14066, 14041, 14016, 13991, 13966, 13942, 13918, 13893
  1057. .dw 13869, 13845, 13821, 13798, 13774, 13750, 13727, 13704, 13680, 13657, 13634, 13611, 13589, 13566, 13543, 13521
  1058. .dw 13498, 13476, 13454, 13431, 13409, 13387, 13365, 13343, 13321, 13299, 13278, 13256, 13234, 13213, 13191, 13170
  1059. .dw 13148, 13127, 13106, 13084, 13063, 13042, 13021, 13000, 12979, 12957, 12936, 12915, 12895, 12874, 12853, 12832
  1060. .dw 12811, 12790, 12769, 12749, 12728, 12707, 12686, 12666, 12645, 12624, 12603, 12583, 12562, 12541, 12521, 12500
  1061. .dw 12479, 12459, 12438, 12417, 12397, 12376, 12355, 12334, 12314, 12293, 12272, 12251, 12231, 12210, 12189, 12168
  1062. .dw 12147, 12126, 12105, 12084, 12063, 12042, 12021, 12000, 11979, 11958, 11937, 11915, 11894, 11873, 11851, 11830
  1063. .dw 11808, 11787, 11765, 11743, 11721, 11700, 11678, 11656, 11633, 11611, 11589, 11567, 11544, 11522, 11499, 11476
  1064. .dw 11454, 11431, 11408, 11385, 11361, 11338, 11314, 11291, 11267, 11243, 11219, 11195, 11170, 11146, 11121, 11096
  1065. .dw 11071, 11046, 11020, 10995, 10969, 10943, 10916, 10890, 10863, 10836, 10808, 10781, 10753, 10724, 10696, 10667
  1066. .dw 10637, 10608, 10577, 10547, 10516, 10484, 10452, 10419, 10386, 10352, 10317, 10282, 10246, 10209, 10171, 10132
  1067. .dw 10092, 10050, 10007, 9963,  9917,  9869,  9818,  9765,  9709,  9648,  9582,  9510,  9428,  9330,  9204,  8900
  1068.  
  1069. flash_rate:                              ;table for speeds in normal mode
  1070. .dw 64592, 60094, 56479, 53480, 50932, 48729, 46794, 45076, 43534, 42139, 40868, 39703, 38629, 37634, 36708, 35844
  1071. .dw 35034, 34272, 33555, 32877, 32234, 31624, 31044, 30492, 29964, 29459, 28976, 28513, 28068, 27640, 27229, 26832
  1072. .dw 26449, 26080, 25723, 25378, 25044, 24720, 24406, 24102, 23806, 23519, 23240, 22968, 22704, 22446, 22195, 21951
  1073. .dw 21712, 21480, 21252, 21031, 20814, 20602, 20395, 20192, 19994, 19800, 19610, 19423, 19241, 19062, 18887, 18715
  1074. .dw 18546, 18380, 18218, 18058, 17901, 17747, 17596, 17447, 17301, 17158, 17016, 16877, 16740, 16606, 16473, 16343
  1075. .dw 16214, 16088, 15963, 15840, 15720, 15600, 15483, 15367, 15253, 15140, 15029, 14920, 14812, 14705, 14600, 14496
  1076. .dw 14393, 14292, 14192, 14093, 13996, 13900, 13805, 13711, 13618, 13526, 13436, 13346, 13257, 13170, 13083, 12998
  1077. .dw 12913, 12830, 12747, 12665, 12584, 12504, 12425, 12346, 12269, 12192, 12116, 12041, 11966, 11892, 11819, 11747
  1078. .dw 11675, 11605, 11534, 11465, 11396, 11328, 11260, 11193, 11127, 11061, 10996, 10932, 10868, 10804, 10741, 10679
  1079. .dw 10618, 10556, 10496, 10436, 10376, 10317, 10258, 10200, 10142, 10085, 10029, 9972,  9917,  9861,  9806,  9752
  1080. .dw 9698,  9644,  9591,  9538,  9486,  9434,  9382,  9331,  9280,  9230,  9180,  9130,  9081,  9032,  8983,  8935
  1081. .dw 8887,  8840,  8793,  8746,  8699,  8653,  8607,  8561,  8516,  8471,  8427,  8382,  8338,  8295,  8251,  8208
  1082. .dw 8165,  8122,  8080,  8038,  7996,  7955,  7914,  7873,  7832,  7791,  7751,  7711,  7672,  7632,  7593,  7554
  1083. .dw 7515,  7477,  7438,  7400,  7363,  7325,  7288,  7251,  7214,  7177,  7140,  7104,  7068,  7032,  6997,  6961
  1084. .dw 6926,  6891,  6856,  6821,  6787,  6753,  6719,  6685,  6651,  6617,  6584,  6551,  6518,  6485,  6453,  6420
  1085. .dw 6388,  6356,  6324,  6292,  6260,  6229,  6198,  6167,  6136,  6105,  6074,  6044
  1086.  
  1087. .org 0x500
  1088. random_table:
  1089. .db 0x18,   0xC7,   0x0B,   0xF6,   0xFF,   0xB0,   0xAF,   0x2E
  1090. .db 0x2D,   0xF7,   0xB1,   0xE2,   0x20,   0x26,   0x45,   0x08
  1091. .db 0x53,   0xE6,   0x3D,   0xB3,   0xD4,   0x16,   0xD1,   0xCF
  1092. .db 0x34,   0x1B,   0x9F,   0x13,   0x76,   0xF0,   0x31,   0x4C
  1093. .db 0x9B,   0x3F,   0x50,   0x01,   0xF4,   0xBB,   0x6D,   0x75
  1094. .db 0xDA,   0x69,   0xB4,   0x60,   0x63,   0x3C,   0x3A,   0x12
  1095. .db 0xCA,   0xD2,   0x55,   0x6B,   0xFD,   0xB2,   0x7D,   0xD5
  1096. .db 0x57,   0x27,   0xE7,   0x82,   0xC9,   0x9D,   0x58,   0xF5
  1097. .db 0x5F,   0x4D,   0x38,   0xC5,   0xE4,   0x1D,   0xE3,   0xC1
  1098. .db 0x54,   0x89,   0x8B,   0x0E,   0xFB,   0x05,   0xA7,   0xF3
  1099. .db 0x1F,   0x62,   0x7E,   0x2B,   0xA6,   0x39,   0x0C,   0xE8
  1100. .db 0xAB,   0x11,   0x03,   0x36,   0x72,   0x49,   0xBF,   0x41
  1101. .db 0x59,   0xDD,   0xDB,   0x6A,   0x98,   0x30,   0xF1,   0x42
  1102. .db 0x52,   0x99,   0x61,   0xA4,   0xBD,   0xB5,   0x2F,   0x0F
  1103. .db 0x33,   0xF9,   0x28,   0x92,   0x77,   0x90,   0x3B,   0x04
  1104. .db 0xD9,   0x15,   0xB8,   0x44,   0xE9,   0x7F,   0xDF,   0xD3
  1105. .db 0x94,   0x81,   0x6E,   0x24,   0xAC,   0xFC,   0x2C,   0xA9
  1106. .db 0x46,   0xDE,   0x65,   0x19,   0x9E,   0x4F,   0xA1,   0x8C
  1107. .db 0xD6,   0xEE,   0xB7,   0xC6,   0x95,   0x85,   0x79,   0x96
  1108. .db 0x43,   0x29,   0x3E,   0x86,   0x5D,   0xFE,   0x51,   0x7A
  1109. .db 0xEC,   0x0A,   0xC3,   0x67,   0xC2,   0xEF,   0xE0,   0x2A
  1110. .db 0x6F,   0xB6,   0x91,   0x47,   0xD0,   0xA8,   0x74,   0x02
  1111. .db 0x87,   0x9C,   0xDC,   0xA2,   0xB9,   0xBA,   0x09,   0x14
  1112. .db 0xCC,   0x7B,   0xAE,   0x70,   0xD7,   0xC0,   0xE5,   0xD8
  1113. .db 0x83,   0x7C,   0x07,   0xF8,   0x71,   0x48,   0x0D,   0x78
  1114. .db 0x1C,   0xAA,   0x97,   0xA0,   0x23,   0xBC,   0x73,   0x1E
  1115. .db 0xF2,   0x93,   0x10,   0xC4,   0x37,   0x56,   0x8D,   0x22
  1116. .db 0x4E,   0xAD,   0x5E,   0x5C,   0x35,   0x9A,   0xED,   0xBE
  1117. .db 0x84,   0xA5,   0xA3,   0xCE,   0x5B,   0x66,   0x06,   0x1A
  1118. .db 0x5A,   0x4B,   0x8A,   0xCD,   0x64,   0xEA,   0x17,   0xC8
  1119. .db 0x8F,   0x8E,   0x88,   0xEB,   0x21,   0x68,   0x4A,   0x32
  1120. .db 0x6C,   0xCB,   0x25,   0x40,   0xFA,   0x80,   0xE1,   0x00
  1121.  
  1122. .org 0x580
  1123. .db "Henne's Sites [www.hoelscher-hi.de] "
  1124. .db "Revision 2.6  "
  1125. .db "GPL Freeware  "
A hozzászólás módosítva: Aug 12, 2016
(#) kapu48 válasza Szabi1 hozzászólására (») Aug 12, 2016 / 1
 
Nem is kell messzire menned:
AVR Assembly kezdőknek
(#) gabi20 válasza Szabi1 hozzászólására (») Aug 12, 2016 / 1
 
Szia 8MHz kristállyal így nem fog működni, vagy szerzel egy 16-osat, vagy módosítanod kell az UBRRL értékét a kódban. Ezzel van beállítva a komunikációs sebesség. Ha jól látom 250kbps sebességgel működik az UART, ha 8MHz-ről akarod járatni, az UBRRL értékét 3-ról írd át 1-re.
A hozzászólás módosítva: Aug 12, 2016
(#) Szabi1 válasza gabi20 hozzászólására (») Aug 12, 2016 /
 
Még volna egy kis problémám: A zöld led (PortE0) állandóan ég. De csak akkor szeretném ha pislogna, ha UART-on kap jelet, és amiatt változtatni kell neki a speed-en vagy a brightness-en, de változás után nemsokkal kikapcsolna
  1. /**** A P P L I C A T I O N   N O T E   ************************************
  2. *
  3. * Title                 : DMX512 reception library
  4. * Version               : v2.5
  5. * Last updated  : 29.11.06
  6. * Target                : Botex, SP1500-DMX [ATmega8515]
  7. * Clock                 : 16MHz
  8. *
  9. * written by hendrik hoelscher, www.hoelscher-hi.de
  10. ***************************************************************************
  11.  This program is free software; you can redistribute it and/or
  12.  modify it under the terms of the GNU General Public License
  13.  as published by the Free Software Foundation; either version2 of
  14.  the License, or (at your option) any later version.
  15.  
  16.  This program is distributed in the hope that it will be useful,
  17.  but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  19.  General Public License for more details.
  20.  
  21.  If you have no copy of the GNU General Public License, write to the
  22.  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  23.  
  24.  For other license models, please contact the author.
  25.  
  26. ;***************************************************************************/
  27.  
  28.  
  29. .include "m8515def.inc"
  30.  
  31. ;Register and Pin definitions
  32.  
  33. .def TempA = r16
  34. .def TempB= r17
  35. .def TempC= r18
  36. .def TempD= r3
  37. .def MainFlags= r19
  38. .def ErrFlags=r20
  39. .def StroboHeatH=r21
  40. .def StroboHeatL=r22
  41. .def HeatInc= r9
  42. .def DmxState= r23
  43. .def TCNT0H = r8
  44. .def null= r2
  45. .def SREG_buf= r10
  46.  
  47.  
  48. ;Mod by me
  49.  
  50. ;.equ LED=               PB3
  51. ;.equ CNTRL_LED=  PD7
  52. ;.equ Strobo=    PB7
  53.  
  54. .equ LED=                PD7
  55. .equ CNTRL_LED=  PE0
  56. .equ Strobo=     PA0
  57.  
  58.  
  59. ;Endmod
  60.  
  61.  
  62. .equ ONTIME= 800         ;Time the strobe is triggered
  63.  
  64. ;** vars in SRAM
  65.  
  66. .equ SPEEDraw=   0x61 ;Buffer for Speed
  67. .equ BRIGHTraw=  0x62 ;Buffer for Brightness
  68. .equ MODEraw=    0x63 ;Buffer for strobe mode
  69.  
  70. .equ SPEEDclcH=  0x64 ;Buffer for Speed
  71. .equ SPEEDclcL=  0x65
  72. .equ FIREclcH=   0x66 ;Buffer for Brightness
  73. .equ FIREclcL=   0x67 ;Buffer for Brightness
  74. .equ QUENCHclcH= 0x68 ;Buffer for Brightness
  75. .equ QUENCHclcL= 0x69 ;Buffer for Brightness
  76. .equ MODEclc=    0x6A ;Buffer for strobe mode
  77.  
  78. .equ ERRCODE=    0x6B ;error LED pattern
  79. .equ ERRprescaler= 0x6D ;prescaler for error indicator
  80. .equ RANDSEED=   0x70
  81.  
  82.  
  83. ;***** special flags
  84.  
  85. .equ  OVERHEAT          =0              ;Error Flags
  86. .equ  VALID_DMX         =1
  87. .equ  SIGNAL_COMING =2
  88. .equ  MANUAL            =4              ;use THIS for checking current mode!
  89. .equ  XOP_OFF           =5
  90. .equ  ZChigh            =6              ;for old board's polling
  91. .equ  REV_5_2           =7
  92.  
  93. .equ  doSPEED           =0              ;Main Flags
  94. .equ  doBRIGHT      =1
  95. .equ  doMODE            =2
  96. .equ  doIndicate        =3
  97. .equ  wasLOW            =4      ;used for single flash 
  98. .equ  DMXisSTANDBY      =5
  99. .equ  isREADY           =6
  100. .equ  doFLASH           =7
  101.  
  102. .equ  NORMAL_MODE       =0
  103. .equ  BLINDING_MODE =1
  104. .equ  RANDOM_MODE   =2
  105. .equ  SINGLE_FLASH  =3
  106. .equ  SYNC_MODE         =4             
  107.  
  108. ;interrupt vectors
  109.  
  110. .org 0
  111.        
  112.         rjmp reset                              ;reset vector address
  113.         rjmp zero_crossing              ;External Interrupt0 Vector Address
  114.         reti                                    ;External Interrupt1 Vector Address
  115.         reti                                    ;Input Capture1 Interrupt Vector Address
  116.         rjmp fire                               ;Output Compare1A Interrupt Vector Address
  117.         rjmp quench                             ;Output Compare1B Interrupt Vector Address
  118.         reti                                    ;Overflow1 Interrupt Vector Address
  119.         rjmp dmx_flash                  ;Overflow0 Interrupt Vector Address
  120.         reti                                    ;SPI Interrupt Vector Address
  121.         rjmp get_byte                   ;UART Receive Complete Interrupt Vector Address
  122.         reti                                    ;UART Data Register Empty Interrupt Vector Address
  123.         reti                                    ;UART Transmit Complete Interrupt Vector Address
  124.         reti                                    ;Analog Comparator Interrupt Vector Address
  125.         reti                                    ;External Interrupt2 Vector Address
  126.         reti                                    ;Output Compare0 Interrupt Vector Address
  127.         reti                                    ;EEPROM Interrupt Vector Address
  128.         reti                                    ;SPM complete Interrupt Vector Address
  129.         reti                                    ;SPM complete Interrupt Vector Address 
  130.  
  131. ;INIT
  132. reset:
  133. cli
  134.  
  135. ;Stack
  136.         ldi             TempA, high(RAMEND)
  137.         out             SPH,TempA
  138.         ldi             TempA, low(RAMEND)
  139.         out             SPL,TempA
  140.  
  141. ;***** WATCHDOG
  142.         wdr
  143.         ldi     tempA, (1<<WDE)|(1<<WDCE)
  144.         out     WDTCR, tempA
  145.         ldi     tempA, (1<<WDE)|(1<<WDCE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0) ;set TimeOut to 2.1s
  146.         out     WDTCR, tempA
  147.         wdr
  148.  
  149.        
  150. ;Mod by me     
  151.        
  152. ;***** set Ports
  153.  
  154.  
  155. ; PortA
  156. ;       clr     TempA                           ;clear TempA register 0x00
  157. ;       out             DDRA, TempA                     ;DDRA
  158.        
  159. ;       ser             TempA                           ; TempA equals to 0xFF
  160. ;       out             PortA, TempA            ;DIP-Switches with pullup
  161.        
  162. ; PortB
  163. ;       ldi             TempA, 0b11001000       ;0,1=invers_chck 3=LED 4=ZC 6,7=OUT
  164. ;       out             DDRB, TempA
  165. ;       ldi             TempA, 0b11111011
  166. ;       out             PortB, TempA
  167.  
  168. ; PortC
  169. ;       ldi             TempA, 0b00000000       ;0,1=DIP-switches
  170. ;       out             DDRC, TempA
  171. ;       ldi             TempA, 0b00000011
  172. ;       out             PortC, TempA
  173.  
  174. ; PortD
  175. ;       ldi             TempA, 0b10000000       ;Cntrl-LED
  176. ;       out             DDRD, TempA
  177. ;       ldi             TempA, 0b10000100
  178. ;       out             PortD, TempA
  179.  
  180. ; PortE
  181.         ;*unused*
  182. ;--------------------------------------------------------------------------------------
  183.  
  184.         ; PA0, PA1  for NPN out and PA2 for PNP out instead of PB5 PB6 for NPN and PB7 for PNP
  185.        
  186. ; PortA  OK
  187.         clr     TempA                           ;clear TempA register
  188.         ldi             TempA, 0b11111110
  189.         out             DDRA, TempA                     ;DDRA output except PA0 input
  190.         ldi             TempA, 0b11111111       ; PortA on
  191.         out             PortA, TempA           
  192.        
  193.        
  194.         ; PB0, PB1 i dont known (GROUNDED) PB3 ADC for heat check
  195.        
  196. ; PortB
  197.         ldi             TempA, 0b00000000       ;0,1=invers_chck 3=heat
  198.         out             DDRB, TempA                     ;all input
  199.         ldi             TempA, 0b11110111  ; no pullup for ADC
  200.         out             PortB, TempA
  201.  
  202.         ; PortC DIP Switches 1 to 8
  203.        
  204. ; PortC OK
  205.         ldi             TempA, 0b00000000      
  206.         out             DDRC, TempA
  207.         ser             TempA                           ; TempA equals to 0xFF
  208.         out             PortC, TempA            ;DIP-Switches with pullup
  209.  
  210.        
  211.         ;PortD PD0 (RXD), PD1 (TXD),  PD2 (RDM) for data I/O,  PD7 for green led
  212. ; PortD  OK
  213.         ldi             TempA, 0b10000100       ;LED
  214.         out             DDRD, TempA
  215.         ldi             TempA, 0b10001000
  216.         out             PortD, TempA
  217.  
  218.         ;PortE  PE0 for Red led, PE1 DIP SWITCH 10 and PE2 DIP SWITCH 9
  219. ; PortE  OK
  220.         ldi             TempA, 0b00000001
  221.         out             DDRE, TempA
  222.         ldi             TempA, 0b00000110
  223.         out             PortE, TempA
  224.        
  225. ;Endmod
  226. ;------------------------------------------------------------------------------------------
  227.  
  228.        
  229.        
  230.        
  231.        
  232.         clr             ErrFlags
  233.  
  234.   EEread_target:                                ;get target board
  235.         sbic    EECR, EEWE
  236.         rjmp    EEread_target
  237.         clr             TempA
  238.         out             EEARH, TempA
  239.         ldi             TempA, 2
  240.         out             EEARL, TempA
  241.         sbi             EECR, EERE
  242.         in              TempA, EEDR
  243.                
  244.         cpi             TempA, 1
  245.         breq    init_trgt                       ;old revision
  246.         cpi             TempA, 2
  247.         breq    new_board                       ;new revision
  248.         rjmp    get_target
  249.   new_board:
  250.         sbr             ErrFlags, (1<<REV_5_2)
  251.   init_trgt:
  252.  
  253. ; Timers       
  254.         clr             TempA
  255.         out             TCCR1A, TempA
  256.         ldi     TempA, (1<<CS11)        ;set counter1 @clock/8 frequency
  257.         out     TCCR1B, TempA
  258.         ldi     TempA, (1<<CS02)        ;set counter0 @clock/256 frequency
  259.         out     TCCR0, TempA                           
  260.         ldi     TempA, (1<<TOIE0)       ;enable Timer0 overflow interrupt
  261.         out     TIMSK, TempA
  262.  
  263. ; SPI
  264.         clr             TempA
  265.         out             SPCR, TempA                     ;disable SPI
  266.  
  267. ;ext interrupt 0 for phase zero-crossing control (just new boards!)
  268.         sbrs    ErrFlags, REV_5_2
  269.         rjmp    no_ext_int                      ;old board
  270.        
  271.         ldi     TempA, (1<<ISC01)       ;falling edge
  272.         out     MCUCR, TempA
  273.         ldi             TempA, (1<<INT0)        ;activate
  274.         out     GICR, TempA             ;              
  275.         ldi             TempA, (1<<INTF0)       ;clear interrupt0 flag
  276.         out     GIFR,  TempA
  277.  
  278. no_ext_int:
  279.                
  280. ;USART
  281.         ldi     TempA, 0x01                     ;set USART to 250 kbaud @ 8Mhz
  282.         out     UBRRL, TempA
  283.         ldi     TempA, 0x00
  284.         out     UBRRH, TempA
  285.         ldi     TempA, (1<<URSEL)|(3<<UCSZ0)|(1<<USBS) ; 8n2
  286.         out     UCSRC, TempA                    ;
  287.         in              TempA, UDR                      ;clear Uart Receive Interrupt Flag
  288.         clr             TempA
  289.         out             UCSRA, TempA            ;clear all error flags, disable U2X and MPCM
  290.         clr     DmxState
  291.  
  292. ; MODE SELECT          
  293.         rcall   get_opmode
  294.         sbrc    ErrFlags, MANUAL        ; skip next if manual is set
  295.         rjmp    init_1                          ;don't init in manual mode
  296.         ldi             TempA, (1<<RXCIE)|(1<<RXEN) ;enable Uart RX IRQ & Uart RXD in DMX mode
  297.         out             UCSRB, TempA
  298.    init_1:     
  299.         cbi     PortD, LED                      ; kikapcsolja a ledet
  300.        
  301. ; set Register
  302.         ldi     MainFlags, (1<<DMXisSTANDBY)|(1<<isREADY)|(1<<doSPEED)|(1<<doBRIGHT)|(1<<doMODE)       
  303.         ldi     StroboHeatL, 5
  304.         clr             StroboHeatH
  305.         clr     HeatInc
  306.         clr     null
  307.         sts             SPEEDraw, null
  308.         sts             BRIGHTraw, null
  309.         sts             MODEraw,  null
  310.         ldi     TempA, 3
  311.         sts             ERRcode, TempA
  312.         ldi             TempA, 4
  313.         sts             ERRprescaler, TempA
  314.  
  315.         wdr
  316.  
  317.         wdr                                                                     ;Watchdog-Reset
  318.         sei
  319.  
  320. ;****************************** main (calculations) *****************************
  321.  
  322. main:
  323.                 sbrc    MainFlags, doSPEED              ;should calc new speed?
  324.                 rjmp    calc_speed
  325.                 sbrc    MainFlags, doBRIGHT             ;should calc new brightness?
  326.                 rjmp    calc_brightness
  327.                 sbrc    MainFlags, doMODE               ;should calc new mode?
  328.                 rjmp    calc_mode
  329.                 sbrc    MainFlags, doINDICATE   ;error indicator and heat cntrl (called by zc @10Hz)
  330.                 rjmp    indicate
  331.  
  332.                 sbrc    ErrFlags, REV_5_2
  333.                 rjmp    main                                    ;new boards need no polling
  334.                
  335.                 ;detect ZC !
  336.                 cli
  337.                 sbis    PinD,3                                  ;ZC high?
  338.                 rjmp    check_zc                                ;no
  339.                 sbr             ErrFlags, (1<<ZChigh)   ;yes  ->neg. half wave
  340.                 rjmp    exit_poll
  341.            check_zc:
  342.                 sbrs    ErrFlags, ZChigh                ;was high before and now low -> zc!!
  343.                 rjmp    exit_poll                               ;no (pos. half wave)
  344.                 cbr             ErrFlags, (1<<ZChigh)   ;wait for next neg. half wave
  345.                 rcall   zero_crossing                   ;ZC detected!!
  346.                 rjmp    main           
  347.            exit_poll:
  348.                 sei
  349.                 rjmp    main
  350.  
  351.  
  352. ;____________________________________________________________________________________
  353.  
  354.         calc_speed:
  355.                 cbr             MainFlags, (1<<doSPEED)
  356.                 lds             TempA,  MODEclc
  357.                 cpi             TempA,  SINGLE_FLASH
  358.                 breq    create_flash
  359.                 cpi             TempA,  BLINDING_MODE
  360.                 breq    blinding_speed
  361.                 cpi             TempA,  RANDOM_MODE
  362.                 breq    random_speed
  363.  
  364.  
  365.    normal_speed:  
  366.                 lds             TempA,  SPEEDraw
  367.  
  368.                 cpi             TempA, 5                                ;val <= 5 -> stand by
  369.                 brsh    spd_1
  370.                 sbr             MainFlags, (1<<DMXisSTANDBY)
  371.                 rjmp    main
  372.            spd_1:
  373.                 subi    TempA, 5                                ;range: 0-250 (1-14Hz)
  374.                 ldi             ZH, high(flash_rate*2)
  375.                 ldi             ZL, low(flash_rate*2)
  376.                 add             ZL, TempA
  377.                 adc             ZH, null
  378.                 add             ZL, TempA
  379.                 adc             ZH, null
  380.                 lpm             TempA,  Z+                              ;get flash rate
  381.                 lpm             TempB, Z
  382.      spd_finish:
  383.                 inc             TempB
  384.                 neg             TempA                                   ;clc T0 offset
  385.                 cli                                                             ;atomic operation
  386.                 sts             SPEEDclcL, TempA
  387.                 sts             SPEEDclcH, TempB
  388.                 cp              TempB, TCNT0H                   ;soft speed blending
  389.                 brsh    spd_f1
  390.                 mov             TCNT0H, TempB                   ;atomic write  
  391.                 out             TCNT0, TempA
  392.            spd_f1:
  393.             sei
  394.                 cbr             MainFlags, (1<<DMXisSTANDBY)    
  395.                 rjmp    main
  396.  
  397.        
  398.         create_flash:
  399.                 lds             TempA,  SPEEDraw
  400.                 cpi             TempA,  128
  401.                 brsh    rq_flash
  402.                 sbr             MainFlags, (1<<wasLOW)
  403.                 rjmp    main
  404.            rq_flash:
  405.                 sbrs    MainFlags, wasLOW               ;flash only, when ch was low before!
  406.                 rjmp    main
  407.                 cbr             MainFlags, (1<<wasLOW)
  408.                 sbr             MainFlags, (1<<doFlash)
  409.                 rjmp    main
  410.  
  411.        
  412.         random_speed:                                                           ;use SPEEDraw in TimerISR
  413.                 lds             TempA,  SPEEDraw
  414.                 cpi             TempA, 5                                                ;val <= 5 -> stand by
  415.                 brsh    rnd_1
  416.                 sbr             MainFlags, (1<<DMXisSTANDBY)
  417.                 rjmp    main
  418.        rnd_1:
  419.                 ldi             TempB,  high(3700)
  420.                 ldi             TempA, low(3700)                                ;use ~16.8Hz as base freq in random mode
  421.                 rjmp    spd_finish
  422.  
  423.  
  424.         blinding_speed:
  425.                 lds             TempA,  SPEEDraw
  426.                 cpi             TempA,  64
  427.                 brsh    bs_1
  428.                 sbr             MainFlags, (1<<DMXisSTANDBY)    ;shut down
  429.                 rjmp    main
  430.            bs_1:
  431.             cpi         TempA,  96
  432.                 brsh    bs_2
  433.                 ldi             TempB,  high(4464)                              ;14Hz
  434.                 ldi             TempA, low(4464)
  435.                 rjmp    spd_finish     
  436.                
  437.            bs_2:
  438.             cpi         TempA,  128
  439.                 brsh    bs_3
  440.                 ldi             TempB,  high(4167)
  441.                 ldi             TempA, low(4167)                                ;15Hz
  442.                 rjmp    spd_finish
  443.                
  444.            bs_3:
  445.             cpi         TempA,  160
  446.                 brsh    bs_4
  447.                 ldi             TempB,  high(3906)
  448.                 ldi             TempA, low(3906)                                ;16.6Hz
  449.                 rjmp    spd_finish
  450.                
  451.            bs_4:
  452.             cpi         TempA,  192
  453.                 brsh    bs_5
  454.                 ldi             TempB,  high(3125)
  455.                 ldi             TempA, low(3125)                                ;20Hz
  456.                 rjmp    spd_finish
  457.                
  458.            bs_5:
  459.             cpi         TempA,  224
  460.                 brsh    bs_6
  461.                 ldi             TempB,  high(2500)
  462.                 ldi             TempA, low(2500)                                ;25Hz
  463.                 rjmp    spd_finish
  464.            
  465.        bs_6:
  466.                 ldi             TempB,  high(1250)
  467.                 ldi             TempA, low(1250)                                ;50Hz
  468.                 rjmp    spd_finish
  469.            
  470. ;___________________________________________________________________________________________________
  471.                                                                                
  472.         calc_brightness:
  473.                 cbr             MainFlags, (1<<doBRIGHT)
  474.                 rcall   calc_heatInc                    ;calc new inc val. for heat simulation
  475.  
  476.                 lds             TempA, BRIGHTraw
  477.                 cpi             TempA, 5                                ;val <= 5 -> stand by
  478.                 brsh    brt_1
  479.                 sbr             ErrFlags, (1<<XOP_OFF)  ;standby if <5
  480.                 rjmp    main
  481.            brt_1:
  482.                 cbr             ErrFlags, (1<<XOP_OFF)
  483.                 ldi             ZH, high(firing_curve*2);set pointer to base address
  484.                 ldi             ZL, low(firing_curve*2)
  485.                 add             ZL, TempA
  486.                 adc             ZH, null
  487.                 add             ZL, TempA
  488.                 adc             ZH, null
  489.                 lpm             TempA, Z+                               ;load brightness
  490.                 lpm             TempB, Z                       
  491.  
  492.                 cli                                                             ;atomic operation
  493.                 sts             FIREclcL, TempA                
  494.                 sts             FIREclcH, TempB
  495.  
  496.                 ldi             TempC, high(ONTIME)             ;calc quench time
  497.                 mov             TempD, TempC
  498.                 ldi             TempC, low(ONTIME)
  499.                 add             TempA, TempC
  500.                 adc             TempB, TempD
  501.                 sts             QUENCHclcL, TempA
  502.                 sts             QUENCHclcH, TempB
  503.                 sei    
  504.                 rjmp    main
  505.  
  506.  
  507.         calc_heatInc:
  508.                 lds             TempA, BRIGHTraw
  509.                 swap    TempA
  510.                 lsr             TempA
  511.                 lsr             TempA
  512.                 andi    TempA, 0b00000011
  513.                 inc             TempA
  514.                 inc             TempA
  515.                 mov     HeatInc,        TempA
  516.                 ret
  517.  
  518. ;_______________________________________________________________________________
  519.  
  520.         calc_mode:
  521.                 cbr             MainFlags, (1<<doMODE)
  522.  
  523.                 lds             TempA, MODEraw
  524.                 cpi             TempA, 200
  525.                 brsh    synchronize
  526.                 cpi             TempA, 150
  527.                 brsh    single
  528.                 cpi             TempA, 100
  529.                 brsh    random
  530.                 cpi             TempA, 50
  531.                 brsh    blinder
  532.                 ldi             TempB, NORMAL_MODE                              ;0-63 -> normal mode
  533.                 rjmp    mode_finish
  534.            random:
  535.                 sts             RANDSEED, TempA                                 ;use raw mode val as new random seed
  536.             ldi         TempB, RANDOM_MODE
  537.                 rjmp    mode_finish
  538.            blinder:
  539.             ldi         TempB, BLINDING_MODE                    ;64-127 -> Blinder
  540.                 rjmp    mode_finish
  541.            single:
  542.             ldi         TempB, SINGLE_FLASH                             ;128-190 -> single flash
  543.                 sbr             MainFlags, (1<<DMXisSTANDBY)    ;disable T0-speed
  544.                 rjmp    mode_finish
  545.            synchronize:                                                         ;192-255 -> sync multiple Strobos
  546.                 ldi             TempB, SYNC_MODE
  547.  
  548.            mode_finish:
  549.             lds         TempA, MODEclc
  550.                 cp              TempA, TempB
  551.                 breq    mode_exit
  552.             sts         MODEclc, TempB
  553.                 cpi             TempB, SYNC_MODE
  554.                 breq    mode_sync
  555.                 sbr             MainFlags, (1<<doSPEED)                 ;eval new speeds
  556.            mode_exit:
  557.                 rjmp    main
  558.                
  559.        mode_sync:
  560.                 ldi             TempA, 1
  561.                 cli
  562.                 mov             TCNT0H,TempA                                    ;force instant flash (and get in defined state)
  563.                 ser             TempA
  564.                 out             TCNT0, TempA
  565.                 sei
  566.                 rjmp    main
  567.  
  568.        
  569. ;_______________________________________________________________________________
  570.  
  571.         indicate:
  572.                 cbr             MainFlags, (1<<doINDICATE)
  573.                
  574.                 ldi             TempA, 200                                              ;check restart point
  575.                 cp              StroboHeatL, TempA
  576.                 cpc             StroboHeatH, null
  577.                 brlo    ind_go
  578.                 cpi             StroboHeatH, 2                                  ;check shut down point
  579.                 brsh    ind_stop
  580.           ind_ret:
  581.                 ldi             TempA, 3
  582.                 cp              StroboHeatL, TempA
  583.                 cpc             StroboHeatH, null
  584.                 brlo    ind_1                                          
  585.                 sub             StroboHeatL, TempA
  586.                 sbc             StroboHeatH, null
  587.                                
  588.            ind_1:
  589.            ;ErrorLED
  590.                 lds             TempA, ERRcode
  591.                
  592.                 sbi     PortD, LED                                      ;set bit in io
  593.                 sbrc    TempA, 0                                                ;if 1st bit HI
  594.                 cbi     PortD, LED
  595.  
  596.             lsr         TempA
  597.                 cpi             TempA, 1
  598.                 brne    no_ind   
  599.                        
  600.         ;wenn durchrotiert (ERRpos = 0)
  601.                 ldi             TempA, 0b10000000                               ;load empty pattern
  602.                 sbic    UCSRB, RXEN                                     ;if manual mode -> no DMX indication           
  603.                 sbrc    ErrFlags, VALID_DMX
  604.                 rjmp    dmx_ok
  605.                 ldi             TempA, 0b10000101                               ;load specific error codes
  606.                 sbrs    ErrFlags, SIGNAL_COMING
  607.                 ldi             TempA, 0b10000001
  608.                 rjmp    dmx_nok
  609.            dmx_ok:
  610.             /*blink my led */
  611.             wdr                                                                         ;reset watchdog
  612.            dmx_nok:
  613.                 sbrc    ErrFlags, OVERHEAT
  614.                 ser             TempA
  615.                 cbr     ErrFlags, (1<<VALID_DMX)|(1<<SIGNAL_COMING)
  616.  
  617.            no_ind:
  618.                 sts             ERRcode, TempA
  619.                 rjmp    main                                           
  620.  
  621.            ind_go:                                             
  622.                 sbrc    ErrFlags, OVERHEAT
  623.                 cbr             MainFlags, (1<<doFlash)                 ;cancel flash request if restart
  624.                 cbr             ErrFlags, (1<<OVERHEAT)                 ;strobo is ready again
  625.                 rjmp    ind_ret
  626.            ind_stop:
  627.                 sbr             ErrFlags, (1<<OVERHEAT)                 ;strobo is too hot -> shut down
  628.                 rjmp    ind_ret
  629.  
  630. ;________________________________________________________________________________
  631.  
  632.         global_mode:
  633.                 ;MANUAL/DMX-SELECT
  634.             rcall       get_opmode                                              ;get current operating mode
  635.                 sbrc    ErrFlags, MANUAL                                ;manual mode selected?
  636.                 rjmp    man_mode                                                ; yes
  637.                 sbic    UCSRB, RXEN                                             ;new in DMX mode?
  638.                 ret                                                                             ; no
  639.                 ldi             TempA, (1<<RXCIE)|(1<<RXEN)     ;enable Uart RX IRQ & Uart RXD
  640.                 out             UCSRB, TempA
  641.                 ret
  642.                                
  643.           man_mode:
  644.                 out             UCSRB, null                                             ;disable USART
  645.  
  646.                 ;CHOOSE PARAMETERS
  647.                 rcall   get_address
  648.                 lds             TempB, MODEraw
  649.                 cp              TempB, XL                                               ;have DIP settings changed?
  650.                 breq    exit_man                                                ;no...
  651.                 sts             MODEraw, XL                                             ;save new val
  652.                 mov             TempB, XL
  653.  
  654. ;       (->Speed)
  655.                 andi    TempB, 0b00001111                               ;mask lower nibble
  656.  
  657.                 cpi             TempB, 0
  658.                 breq    man_single_flash
  659.                 cpi             TempB, 15
  660.                 breq    man_blind
  661.                 inc             TempB
  662.                 push    TempC
  663.                 ldi             TempC, 16
  664.                 mul             TempB, TempC                                    ;expand val
  665.                 pop             TempC
  666.                 mov             TempB, r0
  667.                 subi    TempB, -10                                              ;max speed
  668.                 sts             SPEEDraw, TempB                                 ;store new val 
  669.                 sbr             MainFlags, (1<<doSpeed)                 ;calc new speed in main
  670.                 rjmp    dimm_man
  671.                
  672.            man_single_flash:
  673.             sbr         MainFlags, (1<<doFlash)|(1<<DMXisStandBy) ;request flash
  674.                 rjmp    dimm_man
  675.  
  676.            man_blind:
  677.                 ldi             TempB,  (high(2500) +1)
  678.                 mov             TCNT0H, TempB
  679.                 ldi             TempB, low(2500)                                ;25Hz
  680.                 neg             TempB                                                   ;clc T0 offset
  681.                 cli
  682.                 sts             SPEEDclcL, TempB
  683.                 sts             SPEEDclcH, TCNT0H      
  684.                 out             TCNT0, null
  685.                 sei
  686.                 cbr             MainFlags, (1<<DMXisSTANDBY)   
  687.                                
  688. ;   (->Brightness)
  689.            dimm_man:
  690.             andi        XL, 0b11110000                                  ;mask higher nibble
  691.                 subi    XL, -10                                                 ;prevent black out
  692.                 sts             BRIGHTraw, XL                                   ;store new val 
  693.                 sbr             MainFlags, (1<<doBright)                ;calc new brightness in main
  694.                
  695.            exit_man:
  696.                 ret    
  697.  
  698.  
  699. ;****************************** Fire Timing *************************************
  700.  
  701. fire:                          
  702.                 cbi             PortA,  Strobo                          ;FIRE!
  703.                 reti
  704.  
  705.  
  706. quench:
  707.                 in      SREG_buf, SREG
  708.                 push    TempA
  709.  
  710.                 sbi             PortA,  Strobo                          ;quench
  711.  
  712.                 in              TempA,   TIMSK                          ;disable interrupt
  713.                 cbr             TempA,   (1<<OCIE1A)|(1<<OCIE1B)
  714.                 out             TIMSK,   TempA 
  715.    
  716.                 sbr             MainFlags, (1<<isREADY)         ;Ready...
  717.        
  718.                 pop             TempA
  719.                 out     SREG, SREG_buf 
  720.                 reti
  721.  
  722.  
  723. ;****************************** zero crossing ***********************************
  724.  
  725. zero_crossing:
  726.                 in      SREG_buf, SREG
  727.                 push    TempA
  728.                 push    TempB
  729.  
  730.                 sbrs    MainFlags, doFLASH                      ;flash request?
  731.                 rjmp    exit_zc                                         ; no...
  732.                 ;set up new flash
  733.                 sbrc    ErrFlags, OVERHEAT                      ;is strobo too hot?
  734.                 rjmp    exit_zc                                         ; no...
  735.                 sbrs    MainFlags, isREADY                      ;is strobo ready to fire?
  736.                 rjmp    exit_zc                                         ; no...
  737.  
  738.                 cbr             MainFlags, (1<<doFlash)|(1<<isREADY) ;quit flags
  739.  
  740.                 add             StroboHeatL, HeatInc            ;increase heat!
  741.                 adc             StroboHeatH, null
  742.  
  743.                 lds             TempB,   FIREclcH                       ;set firing angle
  744.                 lds             TempA,   FIREclcL
  745.                 out             OCR1AH,  TempB 
  746.                 out             OCR1AL,  TempA
  747.  
  748.                 lds             TempB,   QUENCHclcH                     ;set quench angle
  749.                 lds             TempA,   QUENCHclcL
  750.                 out             OCR1BH,  TempB
  751.                 out             OCR1BL,  TempA
  752.  
  753.                 out             TCNT1H,  null                           ;clear counter
  754.                 out             TCNT1L,  null
  755.  
  756.                 in              TempB,   TIFR                           ;clear irq flags
  757.                 sbr             TempB,   (1<<OCF1A)|(1<<OCF1B)
  758.                 out             TIFR,    TempB
  759.  
  760.                 in              TempB,   TIMSK                          ;enable interrupts
  761.                 sbr             TempB,   (1<<OCIE1A)|(1<<OCIE1B)
  762.                 out             TIMSK,   TempB
  763.  
  764.         exit_zc:
  765.                 lds             TempB,   ERRprescaler
  766.                 dec             TempB
  767.                 brne    zc_finish
  768.                 sbr             MainFlags, (1<<doINDICATE)      ;error indicator and heat cntrl
  769.                 ldi             TempB, 4                                        ;10Hz
  770.                 zc_finish:
  771.                 sts             ERRprescaler, TempB
  772.                 rcall   global_mode                                     ;has global mode changed?
  773.                 pop             TempB
  774.                 pop             TempA
  775.                 out     SREG, SREG_buf 
  776.                 reti
  777.  
  778. ;****************************** DMX-Flashrate ***********************************
  779. dmx_flash:
  780.                 in      SREG_buf, SREG
  781.                 push    ZH
  782.                 push    ZL
  783.                 push    TempB
  784.        
  785.                 dec             TCNT0H                                  ; decrement counter extension
  786.                 brne    exit_dflash
  787.                
  788.                 lds             TempB, SPEEDclcL                ; set nxt flash time
  789.                 out             TCNT0, TempB
  790.                 lds             TCNT0H, SPEEDclcH
  791.                
  792.                 sbrc    MainFlags, DMXisSTANDBY ; if standby -> no flash
  793.                 rjmp    exit_dflash
  794.                
  795.                 lds             TempB, MODEclc
  796.                 cpi             TempB, RANDOM_MODE
  797.                 brne    req_dflash                              ; request flash if not in random mode
  798.                
  799.                
  800.                 ldi             ZH, high(random_table*2);set pointer to base address
  801.                 lds             ZL, RANDSEED
  802.                 lpm             TempB, Z+                               ;load brightness
  803.                 sts             RANDSEED, ZL
  804.                
  805.                 lds             ZL, SPEEDraw   
  806.                 lsr             ZL             
  807.                 cp              ZL, TempB
  808.                 brlo    exit_dflash    
  809.  
  810.     req_dflash:
  811.                 sbrs    ErrFlags, XOP_OFF
  812.                 sbr             MainFlags, (1<<doFlash) ; flash request
  813.  
  814.         exit_dflash:
  815.                 pop             TempB
  816.                 pop             ZL
  817.                 pop             ZH
  818.                 out     SREG, SREG_buf 
  819.                 reti
  820.  
  821.                
  822. ;****************************** Empfang *****************************************
  823.  
  824. get_byte:
  825.                 in      SREG_buf, SREG
  826.                 push    TempA
  827.                 push    TempB
  828.                
  829.                 in              TempA, UCSRA
  830.                 in              TempB, UDR
  831.                
  832.                 sbr     ErrFlags, (1<<SIGNAL_COMING);message for indicator...          
  833.  
  834.                 sbrc    TempA,DOR                               ;check for overrun -> wait for reset
  835.                 rjmp    overrun
  836.  
  837.                 sbrc    TempA, FE                               ;check 1st stop bit
  838.                 rjmp    gb_break
  839.                
  840.                 cpi             DmxState, 1                     ;check for startbyte (else frame error -> reset)
  841.                 breq    startbyte      
  842.  
  843.                 cpi     DmxState, 2                     ;check for start adress
  844.                 breq    startadr
  845.  
  846.                 cpi     DmxState, 3                    
  847.                 breq    get_speed
  848.  
  849.                 cpi             DmxState, 4
  850.                 breq    get_brightness
  851.  
  852.                 cpi             DmxState, 5
  853.                 breq    get_mode
  854.  
  855.                 clr             DmxState                                ;wait for break
  856.         exit_dmx_receive:      
  857.                 pop             TempB
  858.                 pop             TempA
  859.                 out     SREG, SREG_buf 
  860.                 reti           
  861.  
  862.         startbyte:
  863.                 tst     TempB                                   ;if null, then Startbyte
  864.                 brne    overrun
  865.                
  866.                
  867.                 inc     DmxState                                ;next -> start address
  868.                
  869.                 rcall   get_address                             ;read start address
  870.            
  871.                 cp              XL, null                                ;Startadresse = 0 is nich!
  872.                 cpc     XH, null
  873.                 brne    exit_dmx_receive       
  874.        
  875.             clr         DmxState                                ;quit receive routine
  876.                 sts             BRIGHTraw, null             ;set brightness to null
  877.                 sbr             MainFlags, (1<<doBRIGHT) ;calc new speed in main               
  878.             rjmp        exit_dmx_receive
  879.  
  880.         startadr:
  881.                 sbiw    XH:XL, 1
  882.                 brne    exit_dmx_receive
  883.                 inc     DmxState                                ;next-> Byte-Evaluation
  884.  
  885.         get_speed:
  886.                 inc     DmxState                                ;next channel
  887.                 lds     TempA, SPEEDraw                 ;load saved speed
  888.                 cp              TempA, TempB                    ;has changed?
  889.                 breq    exit_dmx_receive
  890.                 sts             SPEEDraw, TempB                 ;store new val
  891.                 sbr             MainFlags, (1<<doSpeed) ;calc new speed in main
  892.                 rjmp    exit_dmx_receive
  893.        
  894.         get_brightness:
  895.                 inc     DmxState                                ;next channel
  896.                 lds     TempA, BRIGHTraw                ;load saved brightness
  897.                 cp              TempA, TempB                    ;has changed?
  898.                 breq    exit_dmx_receive
  899.                 sts             BRIGHTraw, TempB                ;store new val 
  900.                 sbr             MainFlags, (1<<doBRIGHT) ;calc new brightness in main
  901.                 rjmp    exit_dmx_receive
  902.  
  903.         get_mode:
  904.                 clr             DmxState
  905.                 sbr     ErrFlags, (1<<VALID_DMX);message for indicator...
  906.                 lds             TempA, MODEraw
  907.                 cp              TempA, TempB
  908.                 breq    exit_dmx_receive
  909.                 sts             MODEraw, TempB                  ;store new val
  910.                 sbr             MainFlags, (1<<doMODE)  ;calc new mode in main
  911.                 rjmp    exit_dmx_receive
  912.                
  913.         gb_break:
  914.                 cbi             UCSRA,FE                                ;clear frame-error flag
  915.                 tst             TempB                                   ;byte must be zero (88µs LO)
  916.                 brne    gb_break1
  917.                 ldi     DmxState, 1                             ;next -> control of start byte
  918.            gb_break1:
  919.                 rjmp    exit_dmx_receive
  920.  
  921.         overrun:
  922.                 clr     DmxState                                ;wait for framing error
  923.                 cbi             UCSRA,DOR                               ;clear overrun flag !!
  924.                 rjmp    exit_dmx_receive
  925.                
  926.  
  927. ;****************************** DIP states ****************************************
  928. get_address:
  929.                 cli                                                             ;atomic operation
  930.                 sbic    PinB, PB0                               ;this bridge is open in inverted strobes!
  931.                 rjmp    ga_invert                               ;get inverted start address
  932.                 in              XL, PinC                                ;Einlesen der Startadresse             
  933.                 com             XL                                              ;Invertierung
  934.                 clr             XH
  935.                 sbis    PinE, PE2                               ;9.address bit
  936.                 inc             XH
  937.                 reti
  938.           ga_invert:
  939.                 clr             XH
  940.                 clr             XL
  941.                 sbis    PinC,PC1                                ;9th bit
  942.                 inc             XH
  943.                 sbis    PinC,PC2
  944.                 sbr             XL, (1<<7)
  945.                 sbis    PinC,PC3
  946.                 sbr             XL, (1<<6)
  947.                 sbis    PinC,PC4
  948.                 sbr             XL, (1<<5)
  949.                 sbis    PinC,PC5
  950.                 sbr             XL, (1<<4)
  951.                 sbis    PinC,PC6
  952.                 sbr             XL, (1<<3)
  953.                 sbis    PinC,PC7
  954.                 sbr             XL, (1<<2)
  955.                 sbis    PinE,PE2
  956.                 sbr             XL, (1<<1)
  957.                 sbis    PinE,PE1
  958.                 sbr             XL, (1<<0)             
  959.                 reti
  960.  
  961.  
  962. get_opmode:                                                             ;operating mode
  963.                 cli                                                             ;atomic operation
  964.                 cbr             ErrFlags, (1<<MANUAL)  
  965.                 sbic    PinB, PB0                               ;this bridge is open in inverted strobes!
  966.                 rjmp    gopm_invert                             ;get inverted start address
  967.                 sbis    PinE, PE1                               ; dip 10 bevan kapcsolva?
  968.                 sbr             ErrFlags, (1<<MANUAL)  ; igen
  969.                 reti
  970.       gopm_invert:
  971.                 sbis    PinC, PC0
  972.                 sbr             ErrFlags, (1<<MANUAL)
  973.                 reti
  974.                
  975.  
  976.  
  977. ;****************************** check Revision *****************************************
  978.  
  979. .equ poll_HI  =0;
  980. .equ irq_HI   =1;
  981.  
  982. get_target:
  983.                 clr     R20
  984.                 ldi     R18, 50        
  985.                 ldi     R19, 50
  986.  
  987.         gt_loop:                               
  988.                 ldi     R16, $FF                                        ; make 16Hz flashing
  989.   trgt1:ldi     R17, $C4
  990.   trgt2:                                                                ; chck zc-source
  991.         sbis    PinB, 4                                 ; Poll pin HI?
  992.                 rjmp    poll_low
  993.                 sbr     R20, (1<<poll_HI)
  994.        ret_poll:
  995.                 sbis    PinD, 3                                 ; irq pin HI?
  996.                 rjmp    irq_low
  997.                 sbr     R20, (1<<irq_HI)
  998.            ret_irq:
  999.         dec     R17
  1000.         brne    trgt2
  1001.                 wdr
  1002.         dec     R16
  1003.         brne    trgt1
  1004.          
  1005.  
  1006.                 sbis    PortD,LED                               ;blink
  1007.                 rjmp    trgt_off
  1008.                 cbi             PortD,LED
  1009.                 ;cbi            PortE,CNTRL_LED
  1010.                 rjmp    gt_loop
  1011.            trgt_off:
  1012.                 sbi     PortD,LED
  1013.                 ;sbi            PortE,CNTRL_LED
  1014.                 rjmp    gt_loop
  1015.                
  1016.                 poll_low:
  1017.             sbrs        R20, poll_HI
  1018.                 rjmp    ret_poll
  1019.                 cbr             R20, (1<<poll_HI)       ; zc happened
  1020.                 dec             R18                                     ; dec poll zc counter
  1021.                 brne    ret_poll
  1022.                 ldi             TempA, 1
  1023.                 rjmp    TARGETwrite                     ; old board detected
  1024.  
  1025.                 irq_low:
  1026.                 sbrs    R20, irq_HI
  1027.                 rjmp    ret_irq
  1028.                 cbr             R20, (1<<irq_HI)        ; zc happened
  1029.                 dec             R19                                     ; dec irq zc counter
  1030.                 brne    ret_irq
  1031.                 ldi             TempA, 2                        ; new board detected
  1032.  
  1033.            TARGETwrite:
  1034.                 sbic    EECR, EEWE
  1035.                 rjmp    TARGETwrite
  1036.                 clr             TempB
  1037.                 out             EEARH, TempB
  1038.                 ldi             TempB, 2
  1039.                 out             EEARL, TempB
  1040.                 out             EEDR, TempA
  1041.                 sbi             EECR, EEMWE
  1042.                 sbi             EECR, EEWE
  1043.                
  1044.                 rjmp    reset
  1045.  
  1046.            
  1047.  
  1048.  
  1049. nix: rjmp nix
  1050.  
  1051.  
  1052. firing_curve:                              ;firing table for linearization of brightness
  1053. .dw 17963, 17625, 17395, 17215, 17066, 16936, 16821, 16716, 16621, 16533, 16450, 16372, 16299, 16230, 16163, 16100
  1054. .dw 16039, 15981, 15924, 15870, 15817, 15766, 15717, 15668, 15621, 15576, 15531, 15487, 15445, 15403, 15362, 15322
  1055. .dw 15283, 15244, 15206, 15169, 15132, 15096, 15060, 15025, 14991, 14957, 14923, 14890, 14858, 14825, 14793, 14762
  1056. .dw 14731, 14700, 14670, 14640, 14610, 14580, 14551, 14522, 14494, 14465, 14437, 14409, 14382, 14354, 14327, 14300
  1057. .dw 14273, 14247, 14220, 14194, 14168, 14142, 14117, 14091, 14066, 14041, 14016, 13991, 13966, 13942, 13918, 13893
  1058. .dw 13869, 13845, 13821, 13798, 13774, 13750, 13727, 13704, 13680, 13657, 13634, 13611, 13589, 13566, 13543, 13521
  1059. .dw 13498, 13476, 13454, 13431, 13409, 13387, 13365, 13343, 13321, 13299, 13278, 13256, 13234, 13213, 13191, 13170
  1060. .dw 13148, 13127, 13106, 13084, 13063, 13042, 13021, 13000, 12979, 12957, 12936, 12915, 12895, 12874, 12853, 12832
  1061. .dw 12811, 12790, 12769, 12749, 12728, 12707, 12686, 12666, 12645, 12624, 12603, 12583, 12562, 12541, 12521, 12500
  1062. .dw 12479, 12459, 12438, 12417, 12397, 12376, 12355, 12334, 12314, 12293, 12272, 12251, 12231, 12210, 12189, 12168
  1063. .dw 12147, 12126, 12105, 12084, 12063, 12042, 12021, 12000, 11979, 11958, 11937, 11915, 11894, 11873, 11851, 11830
  1064. .dw 11808, 11787, 11765, 11743, 11721, 11700, 11678, 11656, 11633, 11611, 11589, 11567, 11544, 11522, 11499, 11476
  1065. .dw 11454, 11431, 11408, 11385, 11361, 11338, 11314, 11291, 11267, 11243, 11219, 11195, 11170, 11146, 11121, 11096
  1066. .dw 11071, 11046, 11020, 10995, 10969, 10943, 10916, 10890, 10863, 10836, 10808, 10781, 10753, 10724, 10696, 10667
  1067. .dw 10637, 10608, 10577, 10547, 10516, 10484, 10452, 10419, 10386, 10352, 10317, 10282, 10246, 10209, 10171, 10132
  1068. .dw 10092, 10050, 10007, 9963,  9917,  9869,  9818,  9765,  9709,  9648,  9582,  9510,  9428,  9330,  9204,  8900
  1069.  
  1070. flash_rate:                              ;table for speeds in normal mode
  1071. .dw 64592, 60094, 56479, 53480, 50932, 48729, 46794, 45076, 43534, 42139, 40868, 39703, 38629, 37634, 36708, 35844
  1072. .dw 35034, 34272, 33555, 32877, 32234, 31624, 31044, 30492, 29964, 29459, 28976, 28513, 28068, 27640, 27229, 26832
  1073. .dw 26449, 26080, 25723, 25378, 25044, 24720, 24406, 24102, 23806, 23519, 23240, 22968, 22704, 22446, 22195, 21951
  1074. .dw 21712, 21480, 21252, 21031, 20814, 20602, 20395, 20192, 19994, 19800, 19610, 19423, 19241, 19062, 18887, 18715
  1075. .dw 18546, 18380, 18218, 18058, 17901, 17747, 17596, 17447, 17301, 17158, 17016, 16877, 16740, 16606, 16473, 16343
  1076. .dw 16214, 16088, 15963, 15840, 15720, 15600, 15483, 15367, 15253, 15140, 15029, 14920, 14812, 14705, 14600, 14496
  1077. .dw 14393, 14292, 14192, 14093, 13996, 13900, 13805, 13711, 13618, 13526, 13436, 13346, 13257, 13170, 13083, 12998
  1078. .dw 12913, 12830, 12747, 12665, 12584, 12504, 12425, 12346, 12269, 12192, 12116, 12041, 11966, 11892, 11819, 11747
  1079. .dw 11675, 11605, 11534, 11465, 11396, 11328, 11260, 11193, 11127, 11061, 10996, 10932, 10868, 10804, 10741, 10679
  1080. .dw 10618, 10556, 10496, 10436, 10376, 10317, 10258, 10200, 10142, 10085, 10029, 9972,  9917,  9861,  9806,  9752
  1081. .dw 9698,  9644,  9591,  9538,  9486,  9434,  9382,  9331,  9280,  9230,  9180,  9130,  9081,  9032,  8983,  8935
  1082. .dw 8887,  8840,  8793,  8746,  8699,  8653,  8607,  8561,  8516,  8471,  8427,  8382,  8338,  8295,  8251,  8208
  1083. .dw 8165,  8122,  8080,  8038,  7996,  7955,  7914,  7873,  7832,  7791,  7751,  7711,  7672,  7632,  7593,  7554
  1084. .dw 7515,  7477,  7438,  7400,  7363,  7325,  7288,  7251,  7214,  7177,  7140,  7104,  7068,  7032,  6997,  6961
  1085. .dw 6926,  6891,  6856,  6821,  6787,  6753,  6719,  6685,  6651,  6617,  6584,  6551,  6518,  6485,  6453,  6420
  1086. .dw 6388,  6356,  6324,  6292,  6260,  6229,  6198,  6167,  6136,  6105,  6074,  6044
  1087.  
  1088. .org 0x500
  1089. random_table:
  1090. .db 0x18,   0xC7,   0x0B,   0xF6,   0xFF,   0xB0,   0xAF,   0x2E
  1091. .db 0x2D,   0xF7,   0xB1,   0xE2,   0x20,   0x26,   0x45,   0x08
  1092. .db 0x53,   0xE6,   0x3D,   0xB3,   0xD4,   0x16,   0xD1,   0xCF
  1093. .db 0x34,   0x1B,   0x9F,   0x13,   0x76,   0xF0,   0x31,   0x4C
  1094. .db 0x9B,   0x3F,   0x50,   0x01,   0xF4,   0xBB,   0x6D,   0x75
  1095. .db 0xDA,   0x69,   0xB4,   0x60,   0x63,   0x3C,   0x3A,   0x12
  1096. .db 0xCA,   0xD2,   0x55,   0x6B,   0xFD,   0xB2,   0x7D,   0xD5
  1097. .db 0x57,   0x27,   0xE7,   0x82,   0xC9,   0x9D,   0x58,   0xF5
  1098. .db 0x5F,   0x4D,   0x38,   0xC5,   0xE4,   0x1D,   0xE3,   0xC1
  1099. .db 0x54,   0x89,   0x8B,   0x0E,   0xFB,   0x05,   0xA7,   0xF3
  1100. .db 0x1F,   0x62,   0x7E,   0x2B,   0xA6,   0x39,   0x0C,   0xE8
  1101. .db 0xAB,   0x11,   0x03,   0x36,   0x72,   0x49,   0xBF,   0x41
  1102. .db 0x59,   0xDD,   0xDB,   0x6A,   0x98,   0x30,   0xF1,   0x42
  1103. .db 0x52,   0x99,   0x61,   0xA4,   0xBD,   0xB5,   0x2F,   0x0F
  1104. .db 0x33,   0xF9,   0x28,   0x92,   0x77,   0x90,   0x3B,   0x04
  1105. .db 0xD9,   0x15,   0xB8,   0x44,   0xE9,   0x7F,   0xDF,   0xD3
  1106. .db 0x94,   0x81,   0x6E,   0x24,   0xAC,   0xFC,   0x2C,   0xA9
  1107. .db 0x46,   0xDE,   0x65,   0x19,   0x9E,   0x4F,   0xA1,   0x8C
  1108. .db 0xD6,   0xEE,   0xB7,   0xC6,   0x95,   0x85,   0x79,   0x96
  1109. .db 0x43,   0x29,   0x3E,   0x86,   0x5D,   0xFE,   0x51,   0x7A
  1110. .db 0xEC,   0x0A,   0xC3,   0x67,   0xC2,   0xEF,   0xE0,   0x2A
  1111. .db 0x6F,   0xB6,   0x91,   0x47,   0xD0,   0xA8,   0x74,   0x02
  1112. .db 0x87,   0x9C,   0xDC,   0xA2,   0xB9,   0xBA,   0x09,   0x14
  1113. .db 0xCC,   0x7B,   0xAE,   0x70,   0xD7,   0xC0,   0xE5,   0xD8
  1114. .db 0x83,   0x7C,   0x07,   0xF8,   0x71,   0x48,   0x0D,   0x78
  1115. .db 0x1C,   0xAA,   0x97,   0xA0,   0x23,   0xBC,   0x73,   0x1E
  1116. .db 0xF2,   0x93,   0x10,   0xC4,   0x37,   0x56,   0x8D,   0x22
  1117. .db 0x4E,   0xAD,   0x5E,   0x5C,   0x35,   0x9A,   0xED,   0xBE
  1118. .db 0x84,   0xA5,   0xA3,   0xCE,   0x5B,   0x66,   0x06,   0x1A
  1119. .db 0x5A,   0x4B,   0x8A,   0xCD,   0x64,   0xEA,   0x17,   0xC8
  1120. .db 0x8F,   0x8E,   0x88,   0xEB,   0x21,   0x68,   0x4A,   0x32
  1121. .db 0x6C,   0xCB,   0x25,   0x40,   0xFA,   0x80,   0xE1,   0x00
  1122.  
  1123. .org 0x580
  1124. .db "Henne's Sites [www.hoelscher-hi.de] "
  1125. .db "Revision 2.6  "
  1126. .db "GPL Freeware  "
A hozzászólás módosítva: Aug 12, 2016
(#) Szabi1 válasza Szabi1 hozzászólására (») Aug 14, 2016 /
 
Már megoldottam, ha kell valakinek posztolom a kódot! Köszönöm mindenki segítségét!
(#) Szabi1 válasza Szabi1 hozzászólására (») Aug 15, 2016 /
 
Csak volna még egy gubanc a kóddal. A neten találtam egy 9CH Led Dimmer kódot ehez az MCU-hoz assemblyben, a fényerőt lehet állítani külön külön 9 darab portbiten, és lehet stroboszkópként is vezérelni, de sajnos egyszerre mind a 9 portbitet. Módosítottam a kódon, csak két DMX csatornát használ, nekem az kellene hogy a stroboszkóp üzemmód csak egy portbitre legyen érvényes, és egy másik portbit, led dimmerként működjön, a fényerőt "(DMX_FIELD)+1" kellene megadja
  1. /**** A P P L I C A T I O N   N O T E   ************************************
  2. *
  3. * Title                 : 9ch DMX LED PWM-Dimmer
  4. * Last updated          : 2016.Aug.15
  5. * Target                : Transceiver Rev.3.02 [ATmega8515]
  6. *
  7. * written by hendrik hoelscher, www.hoelscher-hi.de
  8. ***************************************************************************
  9.  This program is free software; you can redistribute it and/or
  10.  modify it under the terms of the GNU General Public License
  11.  as published by the Free Software Foundation; either version2 of
  12.  the License, or (at your option) any later version.
  13.  
  14.  This program is distributed in the hope that it will be useful,
  15.  but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  17.  General Public License for more details.
  18.  
  19.  If you have no copy of the GNU General Public License, write to the
  20.  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  
  22.  For other license models, please contact the author.
  23.  
  24. ;***************************************************************************/
  25.  
  26. .include "m8515def.inc"
  27.  
  28. ;Register and Pin definitions
  29.  
  30. .def tempL                              = r16
  31. .def tempH                              = r17
  32. .def Flags                              = r18
  33. .def DMXstate                   = r19
  34. .def null                               = r2
  35. .def status                             = r21
  36. .def ind_count                  = r3
  37. .def blink                              = r4
  38. .def PwmCnt                             = r20
  39. .def SREGbuf                    = r5
  40. .def ChaseFine                  = r6
  41. .def ChaseRes                   = r7
  42.  
  43. .equ StrobeFreqH                = 0x80
  44. .equ StrobeFreqL                = 0x81
  45. .equ StrobeBuf                  = 0x82
  46.  
  47. .equ OldStepH                   = 0x83
  48. .equ OldStepL                   = 0x84
  49. .equ NewStepH                   = 0x85
  50. .equ NewStepL                   = 0x86
  51. .equ StepCnt                    = 0x87
  52. .equ ChaseCnt                   = 0x88
  53. .equ ChaseSeed                  = 0x89
  54.  
  55. .equ LED1= PD7
  56. .equ LED2= PE0
  57. .equ BIT9= PE2
  58.  
  59. .equ DMX_FIELD=      0x60               ;SRAM-Beginn
  60. .equ DMX_CHANNELS=   2
  61. .equ PWM_FIELD=      0x70              
  62. .equ F_OSC=          8000
  63. .equ FLASH_DURATION= 400
  64. .equ IND_OFFSET=     12         ;Offset für indicator-Timer (14Hz)
  65.  
  66. #define CHS_SPD          (0x600)
  67. #define RATE         (0x500)
  68. #define PAT0             (0x400)
  69. #define PAT1         (PAT0 +0xA)
  70. #define PAT2             (PAT1 +0xA)
  71. #define PAT3             (PAT2 +0xA)
  72. #define PAT4             (PAT3 +0xA)
  73. #define PAT5         (PAT4 +0xA)
  74. #define PAT6         (PAT5 +0xA)
  75. #define PAT7         (PAT6 +0xA)
  76.  
  77.  
  78. ;***** special Flags
  79.  
  80. #define  VALID_DMX          (0)
  81. #define  SIGNAL_COMING  (1)
  82.  
  83. #define  doIND                  (5)
  84. #define  BLACK_OUT              (6)
  85. #define  DATA_REFRESHED (7)
  86.  
  87.  
  88. ;interrupt vectors
  89. .org 0 
  90.         rjmp init               ;reset vector address
  91.         reti                    ;External Interrupt0 Vector Address
  92.         reti                    ;External Interrupt1 Vector Address
  93.         reti                    ;Input Capture1 Interrupt Vector Address
  94.         rjmp strobe             ;Output Compare1A Interrupt Vector Address
  95.         reti                    ;Output Compare1B Interrupt Vector Address
  96.         reti                    ;Overflow1 Interrupt Vector Address
  97.         rjmp pwm                ;Overflow0 Interrupt Vector Address
  98.         reti                    ;SPI Interrupt Vector Address
  99.         rjmp get_byte   ;UART Receive Complete Interrupt Vector Address
  100.         reti                    ;UART Data Register Empty Interrupt Vector Address
  101.         reti                    ;UART Transmit Complete Interrupt Vector Address
  102.         reti                    ;Analog Comparator Interrupt Vector Address
  103.         reti                    ;External Interrupt2 Vector Address
  104.         reti                    ;Output Compare0 Interrupt Vector Address
  105.         reti                    ; EEPROM Interrupt Vector Address
  106.         reti                    ; SPM complete Interrupt Vector Address
  107.         reti                    ; SPM complete Interrupt Vector Address
  108.  
  109. ; INIT
  110.  
  111. init:
  112.  
  113. ; Stack
  114.         ldi             tempH,high(RAMEND)
  115.         ldi             tempL,low(RAMEND)
  116.         out             SPH,tempH
  117.         out             SPL,tempL
  118.  
  119. ; WATCHDOG
  120.         wdr
  121.         ldi     tempL, (1<<WDE)|(1<<WDCE)
  122.         out     WDTCR, tempL
  123.         ldi     tempL, (1<<WDE)|(1<<WDCE)|(1<<WDP2)|(1<<WDP1)
  124.         out     WDTCR, tempL
  125.         wdr                                                                                             ;set prescaler @0,5s
  126.  
  127. ; PortA
  128.         ser     tempL
  129.         out     DDRA, tempL
  130.         clr     tempL
  131.         out     PortA, tempL                                                    ;low Outputs
  132.  
  133. ; PortB
  134.         ldi             tempL, 0b00000011
  135.         out             DDRB, tempL
  136.         ldi             tempL, 0b11110100
  137.         out             PortB, tempL
  138.  
  139. ; PortD
  140.         ldi     tempL, 0b10000100
  141.         out     DDRD, tempL
  142.         ldi     tempL, 0b01111000
  143.         out     PortD, tempL                                                    ;DMX & Spare , LED1 on
  144.  
  145. ; PortE
  146.         ldi     tempL, 0b00000001
  147.         out     DDRE, tempL
  148.         ser             tempL
  149.         out     PortE, tempL                                                    ;LED2 off, BIT9 & OPTION Pullup
  150.  
  151. ; Timers
  152.         ldi     tempL, (1<<CS01)                                                ;set counter0 @clock/8 frequency
  153.         out     TCCR0, tempL
  154.         clr             tempL
  155.         out             TCCR1A, tempL
  156.         ldi     tempL, (1<<CS12)|(1<<WGM12)                     ;set counter1 @clock/256 frequency, CTCmode
  157.         out     TCCR1B, tempL
  158.         ldi     tempL,  (1<<TOIE0)                                              ;aktivate overflow interrupt
  159.         out     TIMSK, tempL
  160.                
  161.         rcall   init_dmx
  162.        
  163.        
  164. ; set Register
  165.         clr null
  166.         clr blink
  167.         com blink
  168.         mov     ChaseFine, blink
  169.         ldi tempL, IND_OFFSET
  170.         mov ind_count, tempL
  171.         ldi PwmCnt, 0xFF
  172.         ldi     Flags, 0                                                                        ;clear Flags
  173.        
  174.         sts StepCnt, null
  175.         sts     NewStepH, null
  176.         sts NewStepL, null
  177.         ldi     tempL, 1
  178.         sts ChaseCnt, tempL
  179.         sts ChaseSeed, tempL
  180.         mov     ChaseRes, tempL        
  181.  
  182.         wdr
  183.         sei
  184.  
  185. main:   sbrc    Flags, doIND
  186.                 rcall   indicate
  187.  
  188.                 rcall   eval_strobe_freq
  189. ;rcall chase
  190.                 rjmp    main
  191.  
  192.  
  193.  
  194. ;****************************** LED INDICATOR ***********************************
  195. indicate:
  196.                 cbr             Flags, (1<<doIND)       ;clear flag
  197.                 rcall   chase
  198.                 dec             ind_count
  199.                 breq    ind_a
  200.                 ret
  201.      
  202.           ind_a:
  203.                 wdr                                                     ;reset Watchdog
  204. ;working LED
  205.                 sbrc    Flags, DATA_REFRESHED   ;should flash?
  206.                 rjmp    data_flash     
  207.                 sbi             PortE, LED2                     ; LED off
  208.  
  209. Error_LED:
  210.                 sbrc    blink, 0                        ;wenn erstes bit HI
  211.                 rjmp    on
  212.                 sbi     PortD, LED1
  213.                 rjmp    ind_tst
  214.          on:
  215.                 cbi     PortD, LED1
  216.  
  217.      ind_tst:
  218.             lsr         blink
  219.                 ldi             tempL, 1
  220.                 cp              blink, tempL
  221.                 brne    no_ind
  222.                                
  223. ;wenn durchrotiert (blink = 0)
  224.                 ldi             tempL, 0b10000000              
  225.                 sbrs    Flags, VALID_DMX
  226.                 ldi             tempL, 0b10001010
  227.                 sbrs    Flags, SIGNAL_COMING
  228.                 ldi             tempL, 0b10000010
  229.                 mov     blink, tempL
  230.  
  231.                 cbr     Flags, (1<<VALID_DMX)|(1<<SIGNAL_COMING)
  232.        
  233.         no_ind:
  234.                 ldi             tempL, IND_OFFSET
  235.                 mov             ind_count, tempL                ;plant prescaler
  236.                 ret
  237.         data_flash:
  238.                 cbr             Flags, (1<<DATA_REFRESHED)
  239.             sbis        PortE,LED2                              ;blinken grün
  240.                 rjmp    off
  241.                 cbi             PortE,LED2
  242.                 rjmp    Error_LED
  243.                 off:
  244.                 sbi     PortE,LED2
  245.                 rjmp    Error_LED
  246.  
  247.  
  248.  
  249.  
  250. ;****************************** strobe frequency ***********************************
  251. eval_strobe_freq:
  252.                 lds             tempL, DMX_FIELD                                        ;get 1st DMX ch
  253.  
  254.                 rjmp    esf_2
  255.  
  256.  
  257.                 ret
  258.         esf_2:
  259.                 sts             StrobeBuf, tempL
  260.                 cpi             tempL, 32
  261.                 brlo    esf_no_strobe
  262.                 ;cpi            tempL, 245
  263.                 ;brsh   esf_sync
  264.  
  265.                 subi    tempL, 45                                                       ;0-200 allowed
  266.                 ldi             ZL, low(RATE*2)                                         ;get freq from table
  267.                 ldi             ZH, high(RATE*2)
  268.                 add             ZL, tempL                       ;add low byte
  269.                 adc             ZH, null                        ;add with carry high byte
  270.                 add             ZL, tempL                       ;add low byte
  271.                 adc             ZH, null                        ;add with carry low byte
  272.                 lpm             tempL, Z+
  273.                 lpm             tempH, Z
  274.                 cli                     ; clear global interrupt flag
  275.                 sts             StrobeFreqL, tempL                                      ;atomic store
  276.                 sts             StrobeFreqH, tempH
  277.                
  278.                 in              tempL, TIMSK
  279.                 sbr             tempL, (1<<OCIE1A)                                      ;enable irq
  280.                 out             TIMSK, tempL
  281.                 in              tempL, TIFR
  282.                 sbr             tempL, (1<<OCF1A)                                       ;enable irq
  283.                 out             TIFR, tempL
  284.                 reti   
  285.  
  286.  
  287.         esf_no_strobe:
  288.                 in              tempL, TIMSK
  289.                 cbr             tempL, (1<<OCIE1A)                                      ;disable irq
  290.                 out             TIMSK, tempL
  291.                 ;cbr            Flags, (1<<BLACK_OUT)                           ;enable pwm
  292.                 // black out on
  293.                 ret
  294.        
  295. ;       esf_sync:
  296. ;               in              tempL, TIMSK
  297. ;               sbrs    tempL, OCIE1A                                           ;only when strobing
  298. ;               ret
  299. ;               cli
  300. ;               sbr             Flags, (1<<BLACK_OUT)                           ;blank!
  301. ;               lds             ZH, StrobeFreqH
  302. ;               lds             ZL, StrobeFreqL
  303. ;               out             OCR1AH, ZH
  304. ;               out             OCR1AL, ZL
  305. ;               sbiw    ZH:ZL, 20
  306. ;               out             TCNT1H, ZH
  307. ;               out             TCNT1L, ZL             
  308. ;               reti
  309.  
  310.  
  311. ;****************************** manual chaser mode ***********************************
  312. chase:                                                                                          ;called by indicator
  313.                 sbis    PinE, PE1
  314.                 rjmp    chs_a
  315.                 sbic    UCSRB,RXEN
  316.                 ret                                                                                     ;enable DMX reception
  317.                 sbi             UCSRB, RXEN
  318.                 clr             DMXstate
  319.                 ret
  320.  
  321.         chs_exit:
  322.                 sts             ChaseCnt, tempH
  323.                 ret
  324.  
  325.     chs_a:
  326.                 cbi             UCSRB,RXEN                                                      ;disable DMX
  327.                 sbr             Flags, (1<<VALID_DMX)|(1<<SIGNAL_COMING)
  328.                 lds             tempH, ChaseCnt                                         ;load prescaler
  329.                 dec             tempH
  330.                 brne    chs_exit
  331.                 lds             tempL, ChaseSeed                                        ;reseed prescaler
  332.                 sts             ChaseCnt, tempL
  333.  
  334.                 add             ChaseFine, ChaseRes                             ;up-fade val
  335.                 adc             tempH, null                                                     ;(tempH was 0)
  336.                 mov             tempL, ChaseFine
  337.                 com             tempL                                                           ;down-fade val
  338.  
  339.                 tst             tempH
  340.                 brne    chs_step
  341.           chs_step_ret:
  342.                 ldi             XL, low(DMX_FIELD +1)
  343.                 ldi     XH, high(DMX_FIELD)
  344.                 ldi             ZL, 1
  345.            chase_fade:                                                                  ;ch1..8
  346.                 clr             tempH
  347.                 lds             ZH, OldStepL
  348.                 and             ZH, ZL
  349.                 breq    cf_no_old
  350.                 mov             tempH, tempL
  351.            cf_no_old:
  352.             lds         ZH, NewStepL
  353.                 and             ZH, ZL
  354.                 breq    cf_no_new
  355.         add             tempH, ChaseFine
  356.        cf_no_new:
  357.             st          X+, tempH
  358.                 lsl             ZL
  359.                 brne    chase_fade
  360.                
  361.                 clr             tempH                                                           ;9th ch
  362.                 lds             ZH, OldStepH
  363.                 sbrc    ZH, 0
  364.                 mov             tempH, tempL
  365.                 lds             ZH, NewStepH
  366.                 sbrc    ZH, 0
  367.                 add             tempH, ChaseFine
  368.                 st              X, tempH
  369.  
  370.                 ret
  371.                
  372.                
  373.         chs_step:
  374.                 sbr             Flags, (1<<DATA_REFRESHED)
  375.                 clr             ChaseFine                                                       ;reset fader
  376.                 ser             tempL
  377.  
  378.                 lds             tempH, NewStepL                                         ;change steps
  379.                 sts             OldStepL, tempH
  380.                 lds             tempH, NewStepH
  381.                 sts             OldStepH, tempH
  382.  
  383.                 ldi             ZH, high(CHS_SPD*2)                                     ;get speed
  384.                 in              ZL, PinC
  385.                 com             ZL
  386.                 swap    ZL
  387.                 andi    ZL, 0b00001111                                          ;isolate pattern
  388.                 lpm             ZH, Z
  389.                 ldi             tempH, 1
  390.                
  391.                 cpi             ZL, 5                                                           ;switch between resolution and prescale
  392.                 brsh    chs_decres
  393.                 mov             ChaseRes, tempH
  394.                 sts             ChaseSeed, ZH
  395.                 rjmp    chs_strb
  396.        chs_decres:
  397.             mov         ChaseRes, ZH
  398.                 sts             ChaseSeed, tempH
  399.            chs_strb:
  400.  
  401.                 clr             ZH                                                                      ;add strobe
  402.                 sbis    PinE, PE2
  403.                 ldi             ZH,  220
  404.                 sts             DMX_FIELD, ZH
  405.  
  406.                 ldi             ZH, high(PAT0*2)                                        ;get next step
  407.                 lds             tempH, StepCnt
  408.                 mov             ZL, tempH
  409.                 lsl             ZL
  410.                 inc             tempH
  411.                 sts             StepCnt, tempH
  412.                 lpm             tempH, Z+
  413.                 sts             NewStepL, tempH
  414.                 lpm             tempH, Z
  415.                 sts             NewStepH, tempH
  416.                
  417.                 sbrs    tempH, 1                                                        ;reset pattern?
  418.                 rjmp    chs_step_ret
  419.                
  420.                 in              ZL, PinC
  421.                 com             ZL
  422.                 andi    ZL, 0b00000111                                          ;isolate pattern
  423.                 ldi             tempH, 10
  424.                 mul             ZL, tempH      
  425.                 sts             StepCnt, r0                                                     ;save pattern
  426.  
  427.                 rjmp    chs_step_ret           
  428.                
  429.                
  430.                
  431.                        
  432.  
  433.  
  434. ; ***************************9ch 8bitpwm-Ausgabe ****************************************
  435. pwm:                                           
  436.                 in      SREGbuf, SREG
  437.                 push    tempL
  438.  
  439.                 sbrc    Flags, BLACK_OUT                                        ;blanked by strobe?
  440.                 rjmp    pwm_bo_exit
  441.                        
  442.                 lds             tempL, PWM_FIELD
  443.                 cp              tempL, PwmCnt
  444.                 ror             status
  445.          
  446.                 lds             tempL, (PWM_FIELD+1)
  447.                 cp              tempL, PwmCnt
  448.                 ror             status
  449.  
  450.                 lds             tempL, (PWM_FIELD+2)
  451.                 cp              tempL, PwmCnt
  452.                 ror             status
  453.                        
  454.                 lds             tempL, (PWM_FIELD+3)
  455.                 cp              tempL, PwmCnt
  456.                 ror             status
  457.  
  458.                 lds             tempL, (PWM_FIELD+4)
  459.                 cp              tempL, PwmCnt
  460.                 ror             status
  461.  
  462.                 lds             tempL, (PWM_FIELD+5)
  463.                 cp              tempL, PwmCnt
  464.                 ror             status
  465.                
  466.                 lds             tempL, (PWM_FIELD+6)
  467.                 cp              tempL, PwmCnt
  468.                 ror             status
  469.  
  470.                 lds             tempL, (PWM_FIELD+7)
  471.                 cp              tempL, PwmCnt
  472.                 ror             status
  473.                                                                                                     ;9th bit
  474.                 sbis    PinD, PD4                                                       ;invert option
  475.                 rjmp    pwm9_pos                                                        ; no invert
  476.                
  477.                 lds             tempL, (PWM_FIELD+8)
  478.                 sbi             PortB, 0
  479.                 cp              tempL, PwmCnt
  480.                 brlo    pwm_exit
  481.                 cbi             PortB, 0
  482.                 rjmp    pwm_exit
  483.  
  484.            pwm9_pos:
  485.             com         status
  486.                 lds             tempL, (PWM_FIELD+8)
  487.                 cbi             PortB, 0
  488.                 cp              tempL, PwmCnt
  489.                 brlo    pwm_exit
  490.                 sbi             PortB, 0
  491.                 rjmp    pwm_exit
  492.  
  493.         pwm_bo_exit:
  494.                 sbis    PinD, PD4                                                       ;invert option
  495.                 rjmp    pwm_bo_pos                                                      ; no invert
  496.                 ser             status                                                          ;all ch off (inverted)
  497.                 sbi             PortB, 0
  498.                 rjmp    pwm_exit
  499.            pwm_bo_pos:
  500.                 clr             status                                                          ;all ch off
  501.                 cbi             PortB, 0       
  502.  
  503.         pwm_exit:
  504.                 out             PortA, status                                           ;output
  505.                 mov             tempL, PwmCnt                                           ;set next compare time
  506.                 lsr             tempL
  507.                 lsr             tempL
  508.                 lsr             tempL
  509.                 ldi             status, 250
  510.                 sub             status, tempL
  511.                 out             TCNT0, status
  512.  
  513.                 inc             PwmCnt
  514.                 tst             PwmCnt
  515.                 brne    pwm_no_reload
  516.                
  517.                 sbr             Flags, (1<<BLACK_OUT)
  518.                 lds             tempL, (DMX_FIELD+1)                            ;refresh channels
  519.                 sts             (PWM_FIELD+8), tempL
  520.                
  521.                 ldi     tempL, 255;
  522.                 ;lds            tempL, (DMX_FIELD+1)
  523.                 sts             PWM_FIELD, tempL
  524.                
  525.                 ;ldi tempL,255;
  526.                 ;lds            tempL, (DMX_FIELD+1)
  527.                 sts             (PWM_FIELD+1), tempL
  528.                
  529.                 ;ds             tempL, (DMX_FIELD+1)
  530.                 sts             (PWM_FIELD+2), tempL
  531.                
  532.                 ;lds            tempL, (DMX_FIELD+1)
  533.                 sts             (PWM_FIELD+3), tempL
  534.                
  535.                 ;lds            tempL, (DMX_FIELD+1)
  536.                 sts             (PWM_FIELD+4), tempL
  537.                
  538.                 ;lds            tempL, (DMX_FIELD+1)
  539.                 sts             (PWM_FIELD+5), tempL
  540.                
  541.                 ;lds            tempL, (DMX_FIELD+1)
  542.                 sts             (PWM_FIELD+6), tempL
  543.                
  544.  
  545. ;       lds             tempL, (DMX_FIELD+9)
  546.                
  547.                 ; !!!!!!!!!! STROBO out
  548.                 ldi             tempL,255
  549.                 sts             (PWM_FIELD+7), tempL
  550.                
  551.                
  552.                 ldi             PwmCnt, 1                                                       ;reseed counter
  553.                 sbr             Flags, (1<<doIND)                                       ;indicate in main
  554.          
  555.           pwm_no_reload:
  556.                 pop             tempL
  557.                 out     SREG, SREGbuf
  558.                 reti
  559.  
  560.  
  561.  
  562. ; ***************************Strobo function ****************************************
  563. strobe:
  564.                 in      SREGbuf, SREG
  565.                 push    tempL
  566.                 push    tempH
  567.  
  568.                 sbrs    Flags, BLACK_OUT
  569.                 rjmp    str_blank
  570.                 cbr             Flags, (1<<BLACK_OUT)                           ;enable pwm
  571.                 ldi             tempL,  low(FLASH_DURATION)                     ;load flash time
  572.                 ldi             tempH, high(FLASH_DURATION)
  573.                 rjmp    str_exit
  574.  
  575.         str_blank:
  576.                 sbr             Flags, (1<<BLACK_OUT)
  577.                 lds             tempL, StrobeFreqL
  578.                 lds             tempH, StrobeFreqH
  579.  
  580.         str_exit:
  581.                 out             OCR1AH, tempH
  582.                 out             OCR1AL, tempL
  583.                 pop             tempH
  584.                 pop             tempL
  585.                 out     SREG, SREGbuf
  586.                 reti   
  587.  
  588.  
  589. .include "lib_dmx_in.asm"
  590.  
  591. nix: rjmp nix
  592.  
  593. // Strobo frequency table (damped logarithmic)
  594. .org RATE
  595. .dw 65532, 60407, 56368, 53017, 50170, 47708, 45546, 43626, 41904, 40345, 38925, 37623, 36423, 35311, 34277, 33311
  596. .dw 32406, 31555, 30753, 29996, 29278, 28596, 27948, 27331, 26741, 26177, 25637, 25120, 24623, 24145, 23685, 23242
  597. .dw 22814, 22402, 22003, 21617, 21244, 20882, 20531, 20191, 19861, 19540, 19228, 18924, 18629, 18341, 18061, 17788
  598. .dw 17521, 17261, 17007, 16760, 16517, 16281, 16049, 15823, 15601, 15384, 15172, 14964, 14760, 14560, 14364, 14172
  599. .dw 13983, 13798, 13617, 13438, 13263, 13091, 12922, 12756, 12593, 12432, 12274, 12119, 11966, 11815, 11667, 11522
  600. .dw 11378, 11237, 11098, 10960, 10825, 10692, 10561, 10431, 10304, 10178, 10054, 9931,  9811,  9691,  9574,  9458
  601. .dw 9343,  9230,  9119,  9008,  8899,  8792,  8686,  8581,  8477,  8375,  8273,  8173,  8074,  7976,  7880,  7784
  602. .dw 7690,  7596,  7504,  7412,  7322,  7232,  7144,  7056,  6969,  6884,  6799,  6715,  6631,  6549,  6467,  6387
  603. .dw 6307,  6227,  6149,  6071,  5994,  5918,  5843,  5768,  5694,  5620,  5548,  5475,  5404,  5333,  5263,  5193
  604. .dw 5125,  5056,  4988,  4921,  4855,  4789,  4723,  4658,  4594,  4530,  4466,  4404,  4341,  4279,  4218,  4157
  605. .dw 4097,  4037,  3978,  3919,  3860,  3802,  3744,  3687,  3631,  3574,  3518,  3463,  3408,  3353,  3299,  3245
  606. .dw 3191,  3138,  3085,  3033,  2981,  2929,  2878,  2827,  2777,  2726,  2677,  2627,  2578,  2529,  2480,  2432
  607. .dw 2384,  2337,  2289,  2242,  2196,  2149,  2103,  2057,  2012,  1967,  1922,  1877,  1833,  1789,  1745,  1701
  608. .dw 1658,  1615,  1572,  1530,  1488,  1446,  1350,  1250,  1100,  1050,  1000,  950,   900,   850,   800,   750
  609. .dw 700,   650,   600,   550,   500,   450,   400,   350,   300,   250,   200,   150
  610.  
  611.  
  612. .org PAT0                                       ;on
  613. .dw 0b0111111111
  614. .dw 0b1111111111
  615.  
  616. .org PAT1                                       ;Lauflicht
  617. .dw 0b0000000001
  618. .dw 0b0000000010
  619. .dw 0b0000000100
  620. .dw 0b0000001000
  621. .dw 0b0000010000
  622. .dw 0b0000100000
  623. .dw 0b0001000000
  624. .dw 0b0010000000
  625. .dw 0b1100000000
  626.  
  627. .org PAT2                                       ;ping pong
  628. .dw 0b0000010000
  629. .dw 0b0000100000
  630. .dw 0b0000001000
  631. .dw 0b0001000000
  632. .dw 0b0000000100
  633. .dw 0b0010000000
  634. .dw 0b0000000010
  635. .dw 0b0100000000
  636. .dw 0b1000000001
  637.  
  638. .org PAT3                                       ;ping pong
  639. .dw 0b0000011000
  640. .dw 0b0000100100
  641. .dw 0b0001000010
  642. .dw 0b1010000001
  643.  
  644. .org PAT4                                       ;pfeil
  645. .dw 0b0000011000
  646. .dw 0b0000111100
  647. .dw 0b0001111110
  648. .dw 0b0011111111
  649. .dw 0b0011100111
  650. .dw 0b0011000011
  651. .dw 0b1010000001
  652.  
  653. .org PAT5                                       ;RGB
  654. .dw 0b0001001001
  655. .dw 0b0011011011
  656. .dw 0b0010010010
  657. .dw 0b0110110110
  658. .dw 0b0100100100
  659. .dw 0b1101101101
  660.  
  661. .org PAT6                                       ;RGB spread
  662. .dw 0b0100010001
  663. .dw 0b0101110011
  664. .dw 0b0001100010
  665. .dw 0b0011101110
  666. .dw 0b0010001100
  667. .dw 0b1110011101
  668.  
  669. .org PAT7
  670. .dw 0b0001001001                        ;RGB single change
  671. .dw 0b0001001011
  672. .dw 0b0001011011
  673. .dw 0b0011011011
  674. .dw 0b0011011010
  675. .dw 0b0011010010
  676. .dw 0b0010010010
  677. .dw 0b0010010110
  678. .dw 0b0010110110
  679. .dw 0b0110110110
  680. .dw 0b0110110100
  681. .dw 0b0110100100
  682. .dw 0b0100100100
  683. .dw 0b0100100101
  684. .dw 0b0100101101
  685. .dw 0b0101101101
  686. .dw 0b0101101001
  687. .dw 0b1101001001
  688.  
  689.  
  690. .org CHS_SPD
  691. .db 25, 10, 3, 2, 1, 2, 3, 5, 8, 12, 17, 22, 27, 35, 40, 48
A hozzászólás módosítva: Aug 15, 2016
(#) filter hozzászólása Aug 21, 2016 /
 
Sziasztok!

Ring buffert szeretnék használni UART-al, de fogadásnál Frame error-t dob. Mi lehet a hiba?

  1. /*************************************************************************
  2. Title:    Example program for the Interrupt controlled UART library
  3. Author:   Peter Fleury <pfleury@gmx.ch>   http://tinyurl.com/peterfleury
  4. File:     $Id: test_uart.c,v 1.7 2015/01/31 17:46:31 peter Exp $
  5. Software: AVR-GCC 4.x
  6. Hardware: AVR with built-in UART/USART
  7.  
  8. DESCRIPTION:
  9.           This example shows how to use the UART library uart.c
  10.  
  11. *************************************************************************/
  12. #include <stdlib.h>
  13. #include <avr/io.h>
  14. #include <avr/interrupt.h>
  15. #include <avr/pgmspace.h>
  16.  
  17. #include "uart.h"
  18.  
  19.  
  20. /* define CPU frequency in Hz in Makefile */
  21. #ifndef F_CPU
  22. #error "F_CPU undefined, please define CPU frequency in Hz in Makefile"
  23. #endif
  24.  
  25. /* Define UART buad rate here */
  26. #define UART_BAUD_RATE      9600      
  27.  
  28.  
  29. int main(void)
  30. {
  31.     unsigned int c;
  32.     char buffer[7];
  33.     int  num=134;
  34.  
  35.    
  36.     /*
  37.      *  Initialize UART library, pass baudrate and AVR cpu clock
  38.      *  with the macro
  39.      *  UART_BAUD_SELECT() (normal speed mode )
  40.      *  or
  41.      *  UART_BAUD_SELECT_DOUBLE_SPEED() ( double speed mode)
  42.      */
  43.     uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
  44.    
  45.     /*
  46.      * now enable interrupt, since UART library is interrupt controlled
  47.      */
  48.     sei();
  49.    
  50.     /*
  51.      *  Transmit string to UART
  52.      *  The string is buffered by the uart library in a circular buffer
  53.      *  and one character at a time is transmitted to the UART using interrupts.
  54.      *  uart_puts() blocks if it can not write the whole string to the circular
  55.      *  buffer
  56.      */
  57.     uart_puts("String stored in SRAM\n");
  58.    
  59.     /*
  60.      * Transmit string  program memory to UART
  61.      */
  62.     uart_puts_P("String stored in FLASH\n");
  63.    
  64.        
  65.     /*
  66.      * Use standard avr-libc functions to convert numbers into string
  67.      * before transmitting via UART
  68.      */    
  69.     itoa( num, buffer, 10);   // convert interger into string (decimal format)        
  70.     uart_puts(buffer);        // and transmit string to UART
  71.  
  72.    
  73.     /*
  74.      * Transmit single character to UART
  75.      */
  76.     uart_putc('\r');
  77.    
  78.     for(;;)
  79.     {
  80.         /*
  81.          * Get received character  ringbuffer
  82.          * uart_getc() returns in the lower byte the received character and
  83.          * in the higher byte (bitmask) the last receive error
  84.          * UART_NO_DATA is returned when no data is available.
  85.          *
  86.          */
  87.         c = uart_getc();
  88.         if ( c & UART_NO_DATA )
  89.         {
  90.             /*
  91.              * no data available  UART
  92.              */
  93.         }
  94.         else
  95.         {
  96.             /*
  97.              * new data available  UART
  98.              * check for Frame or Overrun error
  99.              */
  100.             if ( c & UART_FRAME_ERROR )
  101.             {
  102.                 /* Framing Error detected, i.e no stop bit detected */
  103.                 uart_puts_P("UART Frame Error: ");
  104.             }
  105.             if ( c & UART_OVERRUN_ERROR )
  106.             {
  107.                 /*
  108.                  * Overrun, a character already present in the UART UDR register was
  109.                  * not read by the interrupt handler before the next character arrived,
  110.                  * one or more received characters have been dropped
  111.                  */
  112.                 uart_puts_P("UART Overrun Error: ");
  113.             }
  114.             if ( c & UART_BUFFER_OVERFLOW )
  115.             {
  116.                 /*
  117.                  * We are not reading the receive buffer fast enough,
  118.                  * one or more received character have been dropped
  119.                  */
  120.                 uart_puts_P("Buffer overflow error: ");
  121.             }
  122.             /*
  123.              * send received character back
  124.              */
  125.             uart_putc( (unsigned char)c );
  126.         }
  127.     }
  128.    
  129. }
(#) csabeszq hozzászólása Aug 30, 2016 /
 
Kertben üzemeltet valaki 7/24-ben AVR-t?

Rádiós jellel szeretnék 230V-ot kapcsolni (kerti lámpa). Az érdekelne, hogy mire kell figyelni -20 fokon.

Nem megoldható a lakásban való elhelyezés, mert egy földkábelnél több nem fér ki a gégecsövön.
A hozzászólás módosítva: Aug 30, 2016
(#) Kovidivi válasza csabeszq hozzászólására (») Aug 30, 2016 /
 
Nekem több dolog is megy. A lényeg, hogy azt a helyzetet is le kell kezelni, amikor lefagy (megáll) a program (watchdog), és újrainduláskor onnan folytassa a dolgát, ahol abbahagyta. Ez lehet áramkimaradás, villám miatti zavar, vagy csak egy motor elhúz az utcán, aminek a gyújtása bezavar. Így nem lesz gond.
A minusz 20 fok elvileg nem okozhat gondot, a páralecsapódásra kell gondolni (páraszívó gyöngy, ami a cipőkben szokott lenni? Vagy megfelelő felületi védelem.).
A hozzászólás módosítva: Aug 30, 2016
(#) Massawa válasza Kovidivi hozzászólására (») Aug 30, 2016 /
 
Ha állandoan áram alatt van az AVR akkor még a minusz 20 fok sem árt neki. Nekem egy falba helyezett jo záro dobozban (külsö házfal) van egy AVR vezérlés immár 5 éve és soha semilyen gond nem volt vele.
(#) tomat5 hozzászólása Aug 31, 2016 /
 
Sziasztok!
ATmega2560 timer interrupt külső kvarcról nem működik, ha átállítom belső órajelre akkor viszont igen. A _delay_ms(1000) viszont megy külső órajelről is. Mi lehet ennek az oka?
Köszi a segítséget.
(#) frob hozzászólása Aug 31, 2016 /
 
Sziasztok
programozót szerettem volna készíteni ezen doksi alapján
avrispmk2 doksi
mintha működne, az avrstudio jelzi hogy van egy programozó hw a környéken, de amikor elfogadtatni szeretném a kiválasztott processzort , villan egyet kettőt a státusz led és onnantól csak homokozik az avrstudio, majd jelzi hogy nem elérhető az adott eszköz
olyan mintha újraindulna
csinált esetleg ilyen programozót valaki?
vajon mi lehet a gondja?
előre is köszönöm a segítséget!
R.
(#) zombee válasza frob hozzászólására (») Szept 4, 2016 /
 
kérdés, milyen studio és milyen firmware.
(#) csabeszq hozzászólása Szept 4, 2016 /
 
Kétirányú RF kommunikációt szoktak használni?

Van egy kerti elektronika (lámpa), amit 433 MHz-es kulccsal lehet beindítani. Ha szoftvert szeretnék frissíteni rajta, ahhoz 2 irányú kommunikáció kell.

Szoktak adót és vevőt egy áramkörben egyszerre alkalmazni? (2 modul egy adó és egy vevő 2 antennával).

Vagy létezik ennél jobb megoldás?
A hozzászólás módosítva: Szept 4, 2016
(#) frob válasza zombee hozzászólására (») Szept 4, 2016 /
 
7-es stúdió és az oldalon fellehető fw, de későbbiekben próbáltam több oldalról lévővel is, ahogy nézem külön van valamiért avrdude-hoz és studiohoz az fw, biztos megvan az oka....

Van esetlegesen ötleted? Esetleg új studiohoz való fw?
(#) proba válasza csabeszq hozzászólására (») Szept 4, 2016 /
 
Az RFM70 modulok pl egy antennával egy modulban adók és vevők is.De szerintem ilyenek a bluetoot, és a wifi modulok is.
(#) killbill válasza csabeszq hozzászólására (») Szept 4, 2016 /
 
RFM22B. Van 433, 868 de 915MHz modul is belole. Ketiranyu, jo. Egy antennaval. SPI busz. Mivel az RF atvitel alapvetoen megbizhatatlan, nagyon sok esetben szukseges a ketiranyu kommunikacio, meg akkor is, ha latszolag csak egy iranyba megy az informacio.
(#) zombee válasza frob hozzászólására (») Szept 4, 2016 /
 
Én a LUFA projektet szoktam letölteni, lefordítani és azt feltölteni. Ja, és AVR Studio 4-ben.
Az "újabb" csomagokhoz nincs APK, azt kézzel kell beadni. Hogy ne kelljen fáradni vele,
innen letöltheted az enyémet: Bővebben: Link
(#) frob válasza zombee hozzászólására (») Szept 5, 2016 /
 
Köszönöm!
Ez utána megy avrstudio 7 -el is?
(#) zombee válasza frob hozzászólására (») Szept 5, 2016 /
 
Puding próbája az evés. Van rá esély hogy régebbi verziószámot ad meg és csak azért nem lesz jó.
(#) frob válasza zombee hozzászólására (») Szept 5, 2016 /
 
Sajna így történt, már kezdtem örülni...
Eepromban van a verziószám?
Keresgélek de nem találok hozzá semmit, többnyire mindenhol csak egy hex van, amit bele kell tolni, de eep fájlt szinte sehol nem találtam, csodálkoztam is amikor kibontottam...
A tied 1.17 és a studio 1.18 ra szeretné frissíteni, eddig még nem tudtam róla lebeszélni, értelemszerűen frissíteni meg sajna nem tudja...
Esetleg ha az eepromban van a verzió szám, megtudnád mondani mire kellene átírni, hogy 1.18 verziónak tudja magát?
(#) zombee válasza frob hozzászólására (») Szept 6, 2016 /
 
A FLASH memóriában van, nem az EEPROM-ban. Otthon megtaláltam, átírás után jó lett, ez volt a leggyorsabb módszer. Sajnos nem volt időm feltölteni. Keresd a legutolsó "0117" sztringet a hex-ben. Vigyázz több "0117" is van, a tiéd kb. az utolsó előtti 5-8. sorban lesz. Egyszerű szövegszerkesztővel megnyitod és átíros "0118"-ra, a sor végén az ellenőrzőösszeget (C7) pedig C6-ra. Egyiket növeled, másikat csökkented...
(#) frob válasza zombee hozzászólására (») Szept 6, 2016 /
 
Köszönöm szépen a segítséged, úgy néz ki megy!
(#) Optimaster hozzászólása Szept 7, 2016 /
 
Sziasztok AVR Nagyurak!
Olyan kérdésem lenne,hogy AtTiny13A EEPROM nyagázban valaki otthon van-e?
Írtam egy programot,amit szeretnék,ha csak 1000-szer futna le de,sajnos az EEPROM műveletekhez nem értek.

Segítségeteket előre is Köszönöm!
(#) TavIR-AVR válasza Optimaster hozzászólására (») Szept 8, 2016 / 1
 
Kb program pszeudokod:
eeprom cím beolvas, meg a következő
Most vagyok: elsőolvas*256+masodikolvas
ha mostvagyok>=1000 -> vege

program amit futtatni akarok

mostvagyok=mostvagyok+1
elsoolvas=mostvagyok/256
masodikolvas=mostvagyok-elsoolvas*256
eeprom kiirasa elsolvas, masodikolvas
vege
(#) Optimaster hozzászólása Szept 8, 2016 /
 
Kedves TacIR-AVR!

A folyamattal majdhogy nem tisztában vagyunk.Legalább is az algoritmus hasonló az általad leírtakkal.
A probléma maga a szintaxisokkal volna,mert fogalmunk sincs,hogy ez a valóságban hogyan is festne.
Bemásolom a kódot,amihez kellene. Köszönöm a segítséget!
Következő: »»   743 / 837
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem