Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

USART asinhroni mod

[es] :: Elektronika :: Mikrokontroleri :: USART asinhroni mod

[ Pregleda: 1962 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nikolapirot
Student
Srbija Pirot

Član broj: 235367
Poruke: 239
*.dynamic.isp.telekom.rs.



+1 Profil

icon USART asinhroni mod10.04.2012. u 18:10 - pre 145 meseci
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
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: USART asinhroni mod10.04.2012. u 18:27 - pre 145 meseci
asinhroni mod je "obican/normalan" uart
 
Odgovor na temu

nikolapirot
Student
Srbija Pirot

Član broj: 235367
Poruke: 239
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: USART asinhroni mod10.04.2012. u 18:35 - pre 145 meseci
Da ali kako se programira ?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.61.*

Sajt: mysql.rs


+2377 Profil

icon Re: USART asinhroni mod10.04.2012. u 18:44 - pre 145 meseci
u kom programskom jeziku? koji mcu ?!
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.61.*

Sajt: mysql.rs


+2377 Profil

icon Re: USART asinhroni mod10.04.2012. u 18:58 - pre 145 meseci
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);        
}



 
Odgovor na temu

nikolapirot
Student
Srbija Pirot

Član broj: 235367
Poruke: 239
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: USART asinhroni mod10.04.2012. u 19:06 - pre 145 meseci
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
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.61.*

Sajt: mysql.rs


+2377 Profil

icon Re: USART asinhroni mod10.04.2012. u 19:23 - pre 145 meseci
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 

 
Odgovor na temu

nikolapirot
Student
Srbija Pirot

Član broj: 235367
Poruke: 239
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: USART asinhroni mod10.04.2012. u 19:36 - pre 145 meseci
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 ?
 
Odgovor na temu

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 871
*.stat.customer.blic.net.



+148 Profil

icon Re: USART asinhroni mod10.04.2012. u 19:51 - pre 145 meseci
Goto ne bi trebao da upotrebljavas u C programu, vec za kontrolu toka programa postoje razne kontrolne strukture (for, while, if, switch, ..).


 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.61.*

Sajt: mysql.rs


+2377 Profil

icon Re: USART asinhroni mod10.04.2012. u 19:55 - pre 145 meseci
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 ..
 
Odgovor na temu

nikolapirot
Student
Srbija Pirot

Član broj: 235367
Poruke: 239
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: USART asinhroni mod10.04.2012. u 20:04 - pre 145 meseci
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]
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: USART asinhroni mod10.04.2012. u 20:12 - pre 145 meseci
i2c je dvosmerna na 2 zice a mozes da stavis 100+ uredjaja na isti bus na samo te sve zice
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: USART asinhroni mod

[ Pregleda: 1962 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.