chiark / gitweb /
slower clock
authorian <ian>
Sat, 26 Nov 2005 01:59:48 +0000 (01:59 +0000)
committerian <ian>
Sat, 26 Nov 2005 01:59:48 +0000 (01:59 +0000)
iwjpictest/clockvaries.inc

index 88790138223c5ca4cf868b3f1dd1c0ba04e12294..91b42c4e7d8f466ccb35edc3e27426e5cfceecfd 100644 (file)
@@ -12,6 +12,8 @@ serial_brgh equ (1<<BRGH)
 serial_spbrg equ 129
  endif
  if mclock==1000
+serial_brgh equ (1<<BRGH)
+serial_spbrg equ 6 ; 7% error :-(
  endif
 
 bsc_txsta_brgh macro
@@ -30,12 +32,7 @@ movlw_movwf_spbrg macro
 ;----------------------------------------------------------------------
 ; for i2c at 50kbit/s
 
-; baud rate = Fosc/(4*(SSPADD+1))
- if mclock==20000
-i2c_sspadd equ 100-1 ; Fosc=20MHz, so SSPADD==99 means 50kbit/s
- endif
- if mclock==1000
- endif
+i2c_sspadd equ (mclock/(50*4)) - 1 ; 50kbit/s
 
 ;----------------------------------------------------------------------
 ; NMRA at 50us per division
@@ -46,13 +43,13 @@ i2c_sspadd equ 100-1 ; Fosc=20MHz, so SSPADD==99 means 50kbit/s
 ; for morse at 18wpm according to the PARIS standard
 ; (ie a unit time of 66ms) using timer0 (DS p108)
 
- if mclock==20000
-morse_t0scale equ 0011b ; 1:16 => PSout is 312.5kHz or 3.2us per period
-morse_t0cycles equ 20833 ; see by `waiting', below
+ if mclock==20000 ; Fosc=20MHz, Fcy=5MHz ie 200ns
+morse_t0scale equ 0011b ; 1:8 => 1.6us
+morse_t0cycles equ 41250 ; * 1.6us = 66ms
  endif
- if mclock==1000
-;morse_t0scale equ 0011b ; 1:2 => PSout is 312.5kHz or 3.2us per period
-;morse_t0cycles equ 0
+ if mclock==1000 ; Fosc=1MHz ie 1us, Fcy=4us
+morse_t0scale equ 1000b ; do not use prescaler
+morse_t0cycles equ 16500 ; * 4us = 66ms
  endif
 
 bsc_morse_t0con_012 macro