logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Błędy w kodzie AVR dla komunikacji RS232 z ATmega8?

anonim206 29 Maj 2006 17:53 1535 5
REKLAMA
  • #1 2676259
    anonim206
    Poziom 13  
    Posty: 95
    Pomógł: 3
    Ocena: 6
    Witam
    Mam pewien problem z tym oto urządzonkiuem wlasnego projektu gdyż niemoge znalesć informacji :(
    Poprostu niedziala a ja nieznam sie za bardzo na programowaniu rs232
    Wiec jesli ktos widzi blędy w kodzie to zgóry dziekuje za upomnienia:
    KOD uC:

    
    #include <avr/io.h>
    
    #define F_CPU        1000000                                     
    #define CYCLES_PER_US ((F_CPU+500000)/1000000) 
    
     
    
    #define G_ON sbi(DDRB,PB1);sbi(PORTB,PB1)
    #define G_OFF sbi(DDRB,PB1);cbi(PORTB,PB1)
    
    
    void delay(unsigned int us) 
    { 
        unsigned int delay_loops;
        register unsigned int  i;
        delay_loops = (us+3)/5*CYCLES_PER_US; 
        for (i=0; i < delay_loops; i++) {};
    } 
    void delayms(unsigned int ms)
    {
                unsigned int i;
                for (i=0;i<ms;i++)
                            {
                            delay(999);
                            asm volatile ("WDR"::);
                                                   }
    } 
    void USART_Init( unsigned int baud ) 
    { 
    /* Set baud rate */ 
    UBRRH = (unsigned char)(baud>>8); 
    UBRRL = (unsigned char)baud; 
    /* Enable Receiver and Transmitter */ 
    UCSRB = (1<<RXEN)|(1<<TXEN); 
    /* Set frame format: 8data, 2stop bit */ 
    UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); 
    } 
    
    void USART_Transmit( unsigned char data ) 
    { 
    /* Wait for empty transmit buffer */ 
    while ( !( UCSRA & (1<<UDRE)) ) 
    ; 
    /* Put data into buffer, sends the data */ 
    UDR = data; 
    } 
    
    unsigned char USART_Receive( void ) 
    { 
    /* Wait for data to be received */ 
    while ( !(UCSRA & (1<<RXC)) ) 
    ; 
    /* Get and return received data from buffer */ 
    return UDR; 
    } 
    
    
    int main(void) 
    { 
        int j=0;
        char tab[20];
    USART_Init(12); 
    delayms(500); 
    
    while(1) 
    { 
    USART_Transmit(USART_Receive());
    USART_Receive()==tab[j];
    j++;
    if(j==21)
    {
    if(tab[0]="w")
    {
    G_ON;
    }
    }
    } 
    return 1; 
    } 

    KOD KOMPUTERA (C++)
    
    #include <cstdlib>
    #include <iostream>
    #include "Ntport.h"
    
    using namespace std;
    
    int main()
    {
        int z,j;
    int base=0x2F8;
    char z1,tab[20] = "WIADOMOSC";
    do
    {
    do
    {
    z=Inport(base+5);
    }while((z&32) == 0);
    Outport(base,tab[j]);
    j++;
    }while(tab[j] != 0);
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    układ mial zapalać zieloną diode.
    JESZCZE RAZ Z GÓRY DZIEKUJE I POZDRAWIAM
    Załączniki:
    • test.pdf (18.7 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 2676265
    anonim206
    Poziom 13  
    Posty: 95
    Pomógł: 3
    Ocena: 6
    schemat w pliku test.pdf
  • REKLAMA
  • #3 2677278
    bogdan_p
    Poziom 39  
    Posty: 3849
    Pomógł: 525
    Ocena: 120
    w programie Ci nie pomogę bo nie za bardzo znam się na C , ale co do schematu to masz błąd , brak połączenia emiterów tranzystorów do masy ( minusa ) , pewniejszym połączeniem PC<>uC jest zastosowanie MAX 232 , ale skoro wolisz zrobić to na tranzystorach to zobacz ten schemat http://www.edw.com.pl/pdf/k10/84_13.pdf
    i jeszcze jedna sprawa po co ta dioda w obwodzie EB , wystarczy rezystor od strony uC
  • REKLAMA
  • #4 2677506
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    A nawet jak emitery podłączysz do GND to z kolei na wyjściu TX (które idzie do peseta) nigdy nie będziesz miał stanu ujemnego a to już powoduje niepewne działanie tej linii.
  • REKLAMA
  • #5 2678142
    anonim206
    Poziom 13  
    Posty: 95
    Pomógł: 3
    Ocena: 6
    Dziękuje za pomoc :D, czy teraz z tym rs232 będzie dobrze?
    I jak ktoś mógł by mi pomóc z kodem :(
    Załączniki:
    • inter.pdf (8.99 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #6 2681638
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    anonim206 napisał:
    Dziękuje za pomoc :D, czy teraz z tym rs232 będzie dobrze?
    I jak ktoś mógł by mi pomóc z kodem :(
    OBOWIĄZKOWO !!! jeszcze dioda na tranzystorze n-p-n pomiędzy bazą a emiterem.
REKLAMA