[ nikolapirot @ 10.04.2012. 18:10 ] @
Interesuje me kako se programira ovaj mod ? Pratio sam uputsvta iz data sheet-a i nikako nisam uspeo da isimuliram to u proteusu. Da li bi neko mogao da postuje kod u asembleru za predajnik i za prijemnik asinhronog moda pa da taj kod iskoristim za svoje potrebe?
Hvala unapred
[ bogdan.kecman @ 10.04.2012. 18:27 ] @
asinhroni mod je "obican/normalan" uart
[ nikolapirot @ 10.04.2012. 18:35 ] @
Da ali kako se programira ?
[ bogdan.kecman @ 10.04.2012. 18:44 ] @
u kom programskom jeziku? koji mcu ?!
[ bogdan.kecman @ 10.04.2012. 18:58 ] @
na primer C18 (pic 18Fxxxx)

Code:


//...

#include <stdio.h>
#include <usart.h>


void sendFloat(float x){
  long int lPart;
  long int rPart;
  lPart = (long int) x;
  rPart = (long int)( x * 10000.0)-lPart*10000;
  fprintf(_H_USART,  (const far rom char*)"%li.%04li,", lPart,rPart);
}


void main(void) {
    volatile int i;
    float f;
    
    CMCON               = 0x07; // comparators off

    OpenUSART( USART_TX_INT_OFF  &
              USART_RX_INT_OFF  &
              USART_ASYNCH_MODE &
              USART_EIGHT_BIT   &
              USART_CONT_RX     &
              USART_BRGH_HIGH,
              51                ); //  FOSC / (16 * (spbrg + 1)) = 57692.31

    fprintf (_H_USART,  (const far rom char*)"KUKURIKU\r\n");
    fprintf ((FILE *)_H_USART, (const far rom char*) "%i\r\n",123);     
    sendFloat(123,1325);     

    while(1);        
}


[ nikolapirot @ 10.04.2012. 19:06 ] @
Hvala bogdane, a da li bi neko mogao da mi da ovaj kod u asembleru jer u C-u ne umem da programiram na zalost? To sam naveo i u pocetnom pitanju. Ja cu da programiram 16f628a ali nije veliki problem ukolio mi navedete za neki drugi.
Hvala unapred
[ bogdan.kecman @ 10.04.2012. 19:23 ] @
ja asembler smatram teskim gubljenjem vremena (tako da sam nesvesno izignorisao taj deo u originalnom postu) no .. pogledaj npr: http://www.winpicprog.co.uk/pic_tutorial7.htm ne znam da li mu taj primer koristi 16F876 ili 16F628. Nigelovi primeri su super za pocetnike koji zele da se gube vreme na asm

imas ovo: http://www.oz1bxm.dk/PIC/628uart.htm to ti je bas za 16f628


Code:


;*******************************************************************
; Function:  Sends alive message, then echoes characters at 9600 bps
; Processor: PIC16F628 at 4 MHz using internal RC oscillator
; Hardware:  Testboard K4
; Filename:  628uart.asm
; Author:    Lars Petersen, [email protected]
; Website:   www.qsl.net/oz1bxm/PIC/pic.htm
; Credit:    Tony Nixon's test program at
;            www.piclist.com/techref/microchip/16f877/setup.htm
;*******************************************************************

        LIST P=16F628, R=DEC    ; Use the PIC16F628 and decimal system

        #include "P16F628.INC"  ; Include header file

        __config  _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON

        CBLOCK 0x20             ; Declare variable addresses starting at 0x20
          dataL
        ENDC

        ORG    0x000            ; Program starts at 0x000
;
; --------------------------------
; SET ANALOG/DIGITAL INPUTS PORT A
; --------------------------------
;
        movlw 7
        movwf CMCON             ; CMCON=7 set comperators off
;
; ----------------
; INITIALIZE PORTS
; ----------------
;
        movlw b'00000000'       ; set up portA
        movwf PORTA

        movlw b'00000100'       ; RB2(TX)=1 others are 0
        movwf PORTB

        bsf STATUS,RP0          ; RAM PAGE 1

        movlw 0xFF
        movwf TRISA             ; portA all pins input

        movlw b'11110010'       ; RB7-RB4 and RB1(RX)=input, others output
        movwf TRISB

; ------------------------------------
; SET BAUD RATE TO COMMUNICATE WITH PC
; ------------------------------------
; Boot Baud Rate = 9600, No Parity, 1 Stop Bit
;
        movlw 0x19              ; 0x19=9600 bps (0x0C=19200 bps)
        movwf SPBRG
        movlw b'00100100'       ; brgh = high (2)
        movwf TXSTA             ; enable Async Transmission, set brgh

        bcf STATUS,RP0          ; RAM PAGE 0

        movlw b'10010000'       ; enable Async Reception
        movwf RCSTA
;
; ------------------------------------
; PROVIDE A SETTLING TIME FOR START UP
; ------------------------------------
;
        clrf dataL
settle  decfsz dataL,F
        goto settle

        movf RCREG,W
        movf RCREG,W
        movf RCREG,W            ; flush receive buffer
;
; ---------
; MAIN LOOP
; ---------
;
        call message            ; send "16F628 alive"
loop    call receive            ; wait for a char
        call send               ; send the char
        goto loop
;
; -------------------------------------------
; RECEIVE CHARACTER FROM RS232 AND STORE IN W
; -------------------------------------------
; This routine does not return until a character is received.
;
receive btfss PIR1,RCIF         ; (5) check for received data
        goto receive

        movf RCREG,W            ; save received data in W
        return
;
; -------------------------------------------------------------
; SEND CHARACTER IN W VIA RS232 AND WAIT UNTIL FINISHED SENDING
; -------------------------------------------------------------
;
send    movwf TXREG             ; send data in W

TransWt bsf STATUS,RP0          ; RAM PAGE 1
WtHere  btfss TXSTA,TRMT        ; (1) transmission is complete if hi
        goto WtHere

        bcf STATUS,RP0          ; RAM PAGE 0
        return
;
; -------
; MESSAGE
; -------
;
message movlw  '1'
        call send
        movlw  '6'
        call send
        movlw  'F'
        call send
        movlw  '6'
        call send
        movlw  '2'
        call send
        movlw  '8'
        call send
        movlw  ' '
        call send
        movlw  'a'
        call send
        movlw  'l'
        call send
        movlw  'i'
        call send
        movlw  'v'
        call send
        movlw  'e'
        call send
        movlw  0x0D ; CR
        call send
        movlw  0x0A ; LF
        call send
        return

        END 
[ nikolapirot @ 10.04.2012. 19:36 ] @
Hvala ti bogdane na odgovorima, a mozes li da mi predlozis odakle da ucim C? Svi mi kazu da je na to dat dogovor, da ucim obican C i povezujem ga sa mikrokntrolerima, ali mi ne uspeva i ne mogu nigde da nadjem neki dobar tutorijal. Na primer nigde nisam uspeo da nadjem u C-u sta je komanda ekvivalentna komandi goto u asembleru. Dakle molim ukoliko mislis da je neki tutorial posebno dobar za ucenje C-a za PIC da mi das link. Inace C znam po malo ali sam samo pimenjivao na racunare i to su isuvse glupi primeri. I ovi primeri sto si naveo su za predaju racunaru, a sta se desava kada treba 2 mikrokontrolera da komuniciraju ?
[ peromalosutra @ 10.04.2012. 19:51 ] @
Goto ne bi trebao da upotrebljavas u C programu, vec za kontrolu toka programa postoje razne kontrolne strukture (for, while, if, switch, ..).
[ bogdan.kecman @ 10.04.2012. 19:55 ] @
U C-u pandam za naredbu goto iz asemblera je naredba goto :D ( http://c.comsci.us/syntax/statement/goto.html )

stos je u tome da se u C-u koriscenje goto naredbe smatra losim programiranjem

odakle da ucis C, nemam pojma, najiskrenije, pogledaj po netu nesto tipa "learn c in 21 day" .. nebitno dal je za pic ili za desktop, kad naucis c lako ga primenis bilo gde .. ja sam imao neke knjige za pocetnike za C (jedno 10tak komada) i sve sam podelio i niko od tih ljudi nije naucio C .. tako da .. nemam pojma dal ima neka dobra knjiga / odakle se to uci.. pogleda
http://kldp.org/files/c+in+21+days.pdf
http://newdata.box.sk/bx/c/

cuo sam da je ovo dobra knjiga: http://www.amazon.com/Programm...llers-Technology/dp/0750682922
ali ja je nisam citao tako da ne znam sta pise unutra

pogledaj sta ljudi kazu o tome kako uciti:
http://www.eevblog.com/forum/b...-learn-c-for-microcontrollers/
http://www.edaboard.com/thread24706.html


Citat:

I ovi primeri sto si naveo su za predaju racunaru, a sta se desava kada treba 2 mikrokontrolera da komuniciraju ?


nema nikakve razlike, mcu salje, mcu prima, samo nemas izmedju max232 :D ... nego zasto bi 2 pica pricala preko uart-a? mnogo bolje da koristis i2c ako ti ne treba velika brzina ili spi ako ti treba veca brzina ili pmp ako ti treba bas turbo velika brzina ..
[ nikolapirot @ 10.04.2012. 20:04 ] @
Iskreno zato sto je ovo jedini vid komunikacije (koliko sam ja video) koji koristi samo jednu zicu a to mi trenutno treba. A ja sam ucio kontrolere iz datasheet-a i u skoli nesto povrsno ali sve to u asembleru. Za I2C komunikaciju sam cuo ali nikad upotrebio, a za ove ostale nisam nikad ni cuo... Tek se upustam u dubine ovih stvarcica, i hvala na trudu za pisanje ovolikih odgovora.
A mozes li da mi kazes sta znaci printf za mikrokontroler? Znam da je za PC prikaz na desk top ali sta je za mcu ?

[Ovu poruku je menjao nikolapirot dana 10.04.2012. u 21:15 GMT+1]
[ bogdan.kecman @ 10.04.2012. 20:12 ] @
i2c je dvosmerna na 2 zice a mozes da stavis 100+ uredjaja na isti bus na samo te sve zice