게시글 본문내용
|
다음검색
운동할때 듣기 위해 만들어봤습니다.
TEA5767모듈, 마이컴보드,충전모듈,AA건전지케이스,리튬배터리,TR 이렇게 들어갔구요.
기능은...
- 버튼 3초이상 누르면 전원이 ON-OFF. (전원 OFF시 소비전류는 10uA정도 파워다운)
- 버튼 약 1-2초 누르면 잠금기능 설정.(아무리 눌러도 동작 안하고 LED만 깜빡)
- 버튼을 짧게 (1초이내로) 누르면 저장된 방송 21개가 업카운트 됨.
- 전원을 켜고 1시간뒤에 전원 꺼짐.(TR로 TEA5767 모듈 제어) 운동은 딱 한시간만 함..^^
- 볼륨은 없는데 그냥 듣기 편한정도의 음량...또는 살짝 큼??
- 충전기능 (초소형 모듈- 800원)
- 그리고 무엇보다 말랑말랑한 케이스라 손에 착착 감기는 맛이 있음...ㅎㅎㅎ
소비전력은 18mA이고 배터리의 용량은 600mA이기에 연속사용시간은 33시간이네요.
회로는 간단해서 생략했습니다.
모듈간 연결선이 SDA,SCL,GND,VCC-(노말 TR로 제어 PB0포트사용), INT0에 버튼 Active Low
충전모듈은 배터리 +,-에 연결...이게 회로의 전부 입니다.
소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 | Chip type : ATmega88pa Program type : Application Clock frequency : 8.000000 MHz (internal clock) BOARD : black I2c BD Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega88a.h> #include <delay.h> #include <sleep.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "m88fm.h" #define TEA5767_POWER_ON (PORTB.0 = 1) #define TEA5767_POWER_OFF (PORTB.0 = 0) #define LED2_ON (PORTC.3 = 1) #define LED1_ON (PORTD.7 = 1) #define LED2_OFF (PORTC.3 = 0) #define LED1_OFF (PORTD.7 = 0) #define LED2_TOGGLE (PORTC.3 ^= 1) #define LED1_TOGGLE (PORTD.7 ^= 1) unsigned char write_bytes[5]; bit buttonF,MODE,MODEB,LifeF,POWERF;//,LedF,Led1F; unsigned int LifeTime; // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { unsigned int i=0; delay_ms(10); for(i=0;i<3000;i++){ delay_ms(1); if(PIND.2 == 1) break; } if(i>100 && i<1000) {buttonF=1; LED2_ON;} if(i>1000 && i<2990) {MODE ^=1; LED2_ON;} if(i>2990) POWERF = 1; delay_ms(100); LED2_OFF; } // External Interrupt 1 service routine interrupt [EXT_INT1] void ext_int1_isr(void) { } // Timer 1 output compare A interrupt service routine interrupt [TIM1_COMPA] void timer1_compa_isr(void) // 1 second { if(LifeTime) { LifeTime--; if(LifeTime == 0) { LifeF=1; } } } int TEA5767_write(void) // i2c { unsigned char i=0,ret=0; TWCR = 0xA4; while(!(TWCR & 0x80)); if ((TWSR & 0xF8) != TW_START) ret=1; TWDR = SLA_W; TWCR = 0x84; while(!(TWCR & 0x80)); if ((TWSR & 0xF8) != TW_MT_SLA_ACK) ret=1; for (i = 0; i < 5; i++) // send registers { TWDR = write_bytes[i]; TWCR = 0x84; while(!(TWCR & 0x80)); if ((TWSR & 0xF8) != TW_MT_DATA_ACK) ret=1; } TWCR = 0x94; return ret; } void TEA5767_tune(long value) { unsigned int n = 0; // reference frequency = 32768 Hz // low side injection formula //LOG(("Tune %u\n", (unsigned int)(value/100))); n = (long)4*(value*1000 - 225000)/32768; write_bytes[0] = (write_bytes[0] & 0xC0) | (n >> 8); write_bytes[1] = n & 0xFF; tune = value; } int TEA5767_init(void) { unsigned char ret=0; write_bytes[0] = 0x2B; // default: 91.9 MHz write_bytes[1] = 0xB6; write_bytes[2] = TEA5767_SUD | TEA5767_SRCH_MID_LVL; write_bytes[2] |= TEA5767_MONO; write_bytes[3] = TEA5767_XTAL; write_bytes[4] = 0x00; /** \todo chip detection/identification */ ret = TEA5767_write(); return ret; } void PowerDW(void) { int i=0; TEA5767_POWER_OFF; for(i=0;i<3;i++){ LED2_ON; delay_ms(300); LED2_OFF; delay_ms(100);} LED2_OFF; while(1){ powerdown(); sleep_enable(); delay_ms(10); if(POWERF) { POWERF = 0; break; } } TEA5767_POWER_ON; for(i=0;i<3;i++){ LED2_ON; delay_ms(30); LED2_OFF; delay_ms(300);} TEA5767_init(); LifeTime = 3600; } void init(void) { // Declare your local variables here PORTB=0x00; DDRB=0x01; PORTC=0x30; DDRC=0x38; PORTD=0x0C; DDRD=0x80; TCCR1B=0x0C; OCR1AH=(31000>>8); OCR1AL=31000&0xFF; TIMSK1=0x02; // about 1S UCSR0A=0x00; UCSR0B=0x08; UCSR0C=0x06; UBRR0H=0x00; UBRR0L=0x33; // Interrupt on any change on pins PCINT16-23: Off EICRA=0x02; EIMSK=0x01; EIFR=0x01; PCICR=0x00; // TWI initialization TWBR=0x02; TWAR=0x01; TWCR=0x04; TWSR=0x00; // Global enable interrupts #asm("sei") } // Declare your global variables here // test 07:56 void main(void) { unsigned char temp=0; init(); LED2_ON; TEA5767_POWER_ON; delay_ms(100); TEA5767_init(); delay_ms(100); LED2_OFF; LifeTime = 3600; // 전원 인가후 1시간만 동작 - 운동 1시간 타이머 기능 while (1) { //LED2_TOGGLE; delay_ms(100); if(MODE){ if((MODE != MODEB)||buttonF){ MODEB = MODE; buttonF = 0; LED2_ON; delay_ms(500);LED2_OFF; delay_ms(500);LED2_ON; delay_ms(500);LED2_OFF; } }else { if(buttonF){ delay_ms(200); LED2_OFF; buttonF = 0; switch(temp++){ case 0: TEA5767_tune(89100UL); TEA5767_write(); break; case 1: TEA5767_tune(89700UL); TEA5767_write(); break; case 2: TEA5767_tune(91900UL); TEA5767_write(); break; case 3: TEA5767_tune(93100UL); TEA5767_write(); break; case 4: TEA5767_tune(93900UL); TEA5767_write(); break; case 5: TEA5767_tune(94500UL); TEA5767_write(); break; case 6: TEA5767_tune(95100UL); TEA5767_write(); break; case 7: TEA5767_tune(95900UL); TEA5767_write(); break; case 8: TEA5767_tune(96700UL); TEA5767_write(); break; case 9: TEA5767_tune(97300UL); TEA5767_write(); break; case 10: TEA5767_tune(98100UL); TEA5767_write(); break; case 11: TEA5767_tune(99100UL); TEA5767_write(); break; case 12: TEA5767_tune(101300UL); TEA5767_write(); break; case 13: TEA5767_tune(101900UL); TEA5767_write(); break; case 14: TEA5767_tune(102700UL); TEA5767_write(); break; case 15: TEA5767_tune(103500UL); TEA5767_write(); break; case 16: TEA5767_tune(104500UL); TEA5767_write(); break; case 17: TEA5767_tune(105300UL); TEA5767_write(); break; case 18: TEA5767_tune(106100UL); TEA5767_write(); break; case 19: TEA5767_tune(106900UL); TEA5767_write(); break; case 20: TEA5767_tune(107700UL); TEA5767_write(); temp = 0; break; default: temp = 0; } } } if(POWERF ||LifeF){ POWERF = 0; LifeF = 0; PowerDW(); } } } | cs |
|
첫댓글 와우 ~ 대단한 작품입니다.
초소형으로 제품화해도 될것 같습니다.
헛 칭찬 감사합니다...^^
멋지게 잘 만드셨네요.
감사합니다..^^
초소형에 간단 하게 정말로 잘 만들으셨 습니다 .
감사합니다...^^
와 대단하십니다.
모임때 청음기회 주셨으면
얼마나 좋을까요.
한번 뵙고싶습니다.
모임도 있나요? 소리가 좋다고 할수가 없어서 전문가분들에게 보일만한게 아녀라..ㅎㅎ
@타키 주로 양제 또는 오리역 쪽에서 간헐적으로 모입니다 .
간결하게 잘 만드셨습니다.
감사합니다..^^
예쁘게 잘 만드셨습니다.
감사합니다..^^