Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - ph_sarawut

#1
มีท่านใดที่มี Raspberry pi 3 ไม่ได้ใช้ อยู่บนหิ้งดองไว้  ;D ;D ;D อยากจะปล่อย ติดต่อได้ ครับ
;) ;) ;) ;)
ไลน์: ph_sarawut
โทร: o๘๖-๔๔๘-๘๕๖๖
#2
ผมเช็คดูแล้ว การทำงานเดียวกันขนาดไฟล์ได้เท่ากันเลย
แต่ดูโค้ด asm บนไฟล์ lss เหมื่อน bit field จะเยอะกว่าครับ

ไฟล์ lss แบบ Bit Field


Attiny2313bitField.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000058  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00800060  00000058  000000cc  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .comment      00000011  00000000  00000000  000000cc  2**0
                  CONTENTS, READONLY
  3 .debug_aranges 00000040  00000000  00000000  000000e0  2**3
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_info   000002f2  00000000  00000000  00000120  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_abbrev 00000112  00000000  00000000  00000412  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_line   0000021b  00000000  00000000  00000524  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_frame  00000024  00000000  00000000  00000740  2**2
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_str    00005a83  00000000  00000000  00000764  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_ranges 00000010  00000000  00000000  000061e7  2**0
                  CONTENTS, READONLY, DEBUGGING
10 .debug_macro  00001db8  00000000  00000000  000061f7  2**0
                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:

00000000 <__vectors>:
   0: 12 c0        rjmp .+36      ; 0x26 <__ctors_end>
   2: 17 c0        rjmp .+46      ; 0x32 <__bad_interrupt>
   4: 16 c0        rjmp .+44      ; 0x32 <__bad_interrupt>
   6: 15 c0        rjmp .+42      ; 0x32 <__bad_interrupt>
   8: 14 c0        rjmp .+40      ; 0x32 <__bad_interrupt>
   a: 13 c0        rjmp .+38      ; 0x32 <__bad_interrupt>
   c: 12 c0        rjmp .+36      ; 0x32 <__bad_interrupt>
   e: 11 c0        rjmp .+34      ; 0x32 <__bad_interrupt>
  10: 10 c0        rjmp .+32      ; 0x32 <__bad_interrupt>
  12: 0f c0        rjmp .+30      ; 0x32 <__bad_interrupt>
  14: 0e c0        rjmp .+28      ; 0x32 <__bad_interrupt>
  16: 0d c0        rjmp .+26      ; 0x32 <__bad_interrupt>
  18: 0c c0        rjmp .+24      ; 0x32 <__bad_interrupt>
  1a: 0b c0        rjmp .+22      ; 0x32 <__bad_interrupt>
  1c: 0a c0        rjmp .+20      ; 0x32 <__bad_interrupt>
  1e: 09 c0        rjmp .+18      ; 0x32 <__bad_interrupt>
  20: 08 c0        rjmp .+16      ; 0x32 <__bad_interrupt>
  22: 07 c0        rjmp .+14      ; 0x32 <__bad_interrupt>
  24: 06 c0        rjmp .+12      ; 0x32 <__bad_interrupt>

00000026 <__ctors_end>:
  26: 11 24        eor r1, r1
  28: 1f be        out 0x3f, r1 ; 63
  2a: cf ed        ldi r28, 0xDF ; 223
  2c: cd bf        out 0x3d, r28 ; 61
  2e: 02 d0        rcall .+4      ; 0x34 <main>
  30: 11 c0        rjmp .+34      ; 0x54 <_exit>

00000032 <__bad_interrupt>:
  32: e6 cf        rjmp .-52      ; 0x0 <__vectors>

00000034 <main>:
};
#define PORTB_BITS (*((volatile struct portb_reg *)0x38)) //Direct PORTB

int main(void)
{
DDRB_BITS.DDR0  = 1 ;
  34: b8 9a        sbi 0x17, 0 ; 23
while(1)
{
PORTB_BITS.B0 = ~PORTB_BITS.B0  ;
  36: 88 b3        in r24, 0x18 ; 24
  38: 80 ff        sbrs r24, 0
  3a: c0 9a        sbi 0x18, 0 ; 24
  3c: 80 fd        sbrc r24, 0
  3e: c0 98        cbi 0x18, 0 ; 24
#else
//round up by default
__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
#endif

__builtin_avr_delay_cycles(__ticks_dc);
  40: 2f ef        ldi r18, 0xFF ; 255
  42: 84 e3        ldi r24, 0x34 ; 52
  44: 9c e0        ldi r25, 0x0C ; 12
  46: 21 50        subi r18, 0x01 ; 1
  48: 80 40        sbci r24, 0x00 ; 0
  4a: 90 40        sbci r25, 0x00 ; 0
  4c: e1 f7        brne .-8      ; 0x46 <__SREG__+0x7>
  4e: 00 c0        rjmp .+0      ; 0x50 <__SREG__+0x11>
  50: 00 00        nop
  52: f1 cf        rjmp .-30      ; 0x36 <main+0x2>

00000054 <_exit>:
  54: f8 94        cli

00000056 <__stop_program>:
  56: ff cf        rjmp .-2      ; 0x56 <__stop_program>



ไฟล์ lss แบบ Shift


ATtiny2313FirstProgram.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000058  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00800060  00000058  000000cc  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .comment      00000011  00000000  00000000  000000cc  2**0
                  CONTENTS, READONLY
  3 .debug_aranges 00000020  00000000  00000000  000000e0  2**3
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_info   000000cd  00000000  00000000  00000100  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_abbrev 00000014  00000000  00000000  000001cd  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_line   0000005b  00000000  00000000  000001e1  2**0
                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:

00000000 <__vectors>:
   0: 12 c0        rjmp .+36      ; 0x26 <__ctors_end>
   2: 17 c0        rjmp .+46      ; 0x32 <__bad_interrupt>
   4: 16 c0        rjmp .+44      ; 0x32 <__bad_interrupt>
   6: 15 c0        rjmp .+42      ; 0x32 <__bad_interrupt>
   8: 14 c0        rjmp .+40      ; 0x32 <__bad_interrupt>
   a: 13 c0        rjmp .+38      ; 0x32 <__bad_interrupt>
   c: 12 c0        rjmp .+36      ; 0x32 <__bad_interrupt>
   e: 11 c0        rjmp .+34      ; 0x32 <__bad_interrupt>
  10: 10 c0        rjmp .+32      ; 0x32 <__bad_interrupt>
  12: 0f c0        rjmp .+30      ; 0x32 <__bad_interrupt>
  14: 0e c0        rjmp .+28      ; 0x32 <__bad_interrupt>
  16: 0d c0        rjmp .+26      ; 0x32 <__bad_interrupt>
  18: 0c c0        rjmp .+24      ; 0x32 <__bad_interrupt>
  1a: 0b c0        rjmp .+22      ; 0x32 <__bad_interrupt>
  1c: 0a c0        rjmp .+20      ; 0x32 <__bad_interrupt>
  1e: 09 c0        rjmp .+18      ; 0x32 <__bad_interrupt>
  20: 08 c0        rjmp .+16      ; 0x32 <__bad_interrupt>
  22: 07 c0        rjmp .+14      ; 0x32 <__bad_interrupt>
  24: 06 c0        rjmp .+12      ; 0x32 <__bad_interrupt>

00000026 <__ctors_end>:
  26: 11 24        eor r1, r1
  28: 1f be        out 0x3f, r1 ; 63
  2a: cf ed        ldi r28, 0xDF ; 223
  2c: cd bf        out 0x3d, r28 ; 61
  2e: 02 d0        rcall .+4      ; 0x34 <main>
  30: 11 c0        rjmp .+34      ; 0x54 <_exit>

00000032 <__bad_interrupt>:
  32: e6 cf        rjmp .-52      ; 0x0 <__vectors>

00000034 <main>:
  34: 81 e0        ldi r24, 0x01 ; 1
  36: 87 bb        out 0x17, r24 ; 23
  38: 91 e0        ldi r25, 0x01 ; 1
  3a: 88 b3        in r24, 0x18 ; 24
  3c: 89 27        eor r24, r25
  3e: 88 bb        out 0x18, r24 ; 24
  40: 2f ef        ldi r18, 0xFF ; 255
  42: 34 e3        ldi r19, 0x34 ; 52
  44: 8c e0        ldi r24, 0x0C ; 12
  46: 21 50        subi r18, 0x01 ; 1
  48: 30 40        sbci r19, 0x00 ; 0
  4a: 80 40        sbci r24, 0x00 ; 0
  4c: e1 f7        brne .-8      ; 0x46 <__SREG__+0x7>
  4e: 00 c0        rjmp .+0      ; 0x50 <__SREG__+0x11>
  50: 00 00        nop
  52: f3 cf        rjmp .-26      ; 0x3a <main+0x6>

00000054 <_exit>:
  54: f8 94        cli

00000056 <__stop_program>:
  56: ff cf        rjmp .-2      ; 0x56 <__stop_program>

#3
การเข้าถึง Register แบบ Shift กับใช้ bit-field structure คำสั่งแบบไหนจะเข้าถึงรีจีสเตอร์ได้เร็วกว่ากันครับ
ผมดูแล้วการใช้ Shift น่าจะช้ากว่า ใช่ไหมครับ

โค้ดแบบ Bits Field

#define F_CPU 8000000UL

#include <avr/io.h>
#include <util/delay.h>

struct ddrb_reg {
        unsigned char DDR0: 1;
        unsigned char DDR1: 1;
        unsigned char DDR2: 1;
        unsigned char DDR3: 1;
        unsigned char DDR4: 1;
        unsigned char DDR5: 1;
        unsigned char DDR6: 1;
        unsigned char DDR7: 1;
};
#define DDRB_BITS (*((volatile struct ddrb_reg *)0x37)) //Direct DDRB

struct portb_reg {
        unsigned char B0: 1;
        unsigned char B1: 1;
        unsigned char B2: 1;
        unsigned char B3: 1;
        unsigned char B4: 1;
        unsigned char B5: 1;
        unsigned char B6: 1;
        unsigned char B7: 1;
};
#define PORTB_BITS (*((volatile struct portb_reg *)0x38)) //Direct PORTB

int main(void)
{
DDRB_BITS.DDR0  = 1 ;                                   // ให้ PortB บิต 0 เป็น เอาท์พุท
while(1)
{
PORTB_BITS.B0 = ~PORTB_BITS.B0 ;
_delay_ms(500);
}
return 0 ;
}

#4
Quote from: orion on August 12, 2015, 03:59:02 PM
เคยใช้พวก ตระกูล HCNR ของ AVAGO ครับ
http://www.digikey.com/catalog/en/partgroup/hcnr-200-201-series/19027
เป็น Analog Optoisolator
วงจรการต่อดูจาก Datasheet นะครับ
ลืมหมดแล้ว ไม่ได้ใช้งานนานแล้วครับ
ขอบคุณที่แนะนำเบอร์นี้ครับ ผมเพิ่งรู้จักจริงๆ
Quote from: RoLRoR on August 12, 2015, 05:45:27 PM
อีกวิธีใช้ IC-ADC เช่น MCP32xx เพิ่มแหล่งจ่าย Isolate แยกให้ IC-ADC
และ MCU ติดต่อ IC-ADC โดย SPI/I2C ผ่าน OPTO ก็ได้ครับ
ขอบคุณสำหรับไอเดียนี้ เป็นไอเดียดีเลยครับ ไม่เกิด loss จากการ coupling แน่นอน
#5
เนื่องจาก ADC บน MCU เป็นแบบกราวด์ร่วม ผมอยากจะไปต่อสัญญาณที่กราวด์ต่างกัน จึงอยากให้มัน isolate จะได้แยกกราวด์
ตอนนี้ที่ผมดูๆไว้คือ MAX4617CPE+ ดูสเปคแล้วขณะทำงานมันมีความต้านทาน 10 Ohm เหมื่อนกัน
พอดีผมไม่เคยมีประสบการณ์ใช้งานแนวนี้ อยากขอคำแนะนำท่านที่เคย isolate adc จะเป็นแบบ Multiplexers/Switches ก็ได้ หรือไม่ใช่ก็ได้ครับ
มีเบอร์ชิปหรือวงจรพอแนะนำเป็นแนวทางให้หน่อยครับ
#6
โดยส่วนตัวผมชอบ Eclipse มากเลยครับ เอาไปใช้ได้หลายตัวเลยครับ ที่สำคัญมันใช้ได้ทั้ง MAC,Linux,Windows สะดวกดีครับ
#7
Quote from: whang07 on July 23, 2015, 06:22:43 PM
เล่มนี้ไม่แจกแล้วหรือครับผมอยากได้ครับ :-[ :-[ :-[ :-[ :-[

http://elmki.hu/mc/practical_avr_microcontrollers.pdf

ลองเอาชื่อไปเสิร์ซกูเกิลดู เจอมาครับ
#8
Quote from: crywolf on June 28, 2015, 07:32:51 PM
ส่งให้แล้วครับ

ขอด้วยได้ไหมครับ
ph_sarawut@me.com