Start

Experimente
- R8C/15
- R8C-Oszi
- R8C/13

Grundlagen

Produkte

Neues

Impressum

Speicherscope mit dem R8C/15

Eine praktische Anwendung des R8C/15 ist ein kleines Speicher-Oszilloskop für den PC. Der Controller besitzt einen 10-Bit-AD-Wandler und 1 KB RAM. Dieses Projekt speichert 250 Integer-Messwerte vom Eingang AN8 = P1_0.

Download des Projekts Oszi_15 (R8C-Projekt und VB-Projekt, 90 KB)

Das Programm wartet jeweils auf ein beliebiges Byte vom PC. Dann werden 250 Messungen durchgeführt und zwischengespeichert. Diese Werte werden dann mit 19200 Baud jeweils als Highbyte und Lowbyte an den PC gesandt. Das VB-Programm sendet bei jedem Druck auf die Start-Schaltfläche ein Byte und empfängt dann insgesamt 500 Bytes. Die 10-Bit-Messwerte werden hier nur mit einer Auflösung von 8 Bit am Bildschirm angezeigt. Das Oszillogramm im Bild zeigt die Messung an einem 1-kHz-Sinussignal. Die effektive Abtastrate beträgt ca. 40 kHz bei einem Quarz mit 10 MHz. Man kann ohne weitere Änderungen auch 20 MHz einsetzen und erreicht dann 80 kS/s und eine Baudrate von 38400.

/***********************************************************************/
/*                                                                     */
/*  FILE        :oszi_15.c                                             */
/*  DATE        :Wed, Oct 26, 2005                                     */
/*  DESCRIPTION :Main Program                                          */
/*  CPU TYPE    :Other                                                 */
/*                                                                     */
/*  This file is generated by Renesas Project Generator (Ver.4.0).     */
/*                                                                     */
/*  Einkanal-Scope, R8C/15, 10 MHz, 19200 Baud, 10 Bit, 250 Messungen  */
/*                                                                     */
/***********************************************************************/
                  


 #include "sfr_r815.h";                  

unsigned int ad_buf[250];

void sfr_init(void){
    /* Setting port registers */
    p1 = p1 | 0x10;                         
    /* Setting port direction registers */
    pd1 = pd1 | 0x10;                       
    pd1 = pd1 & 0xdf;                       

    /* Clock synchronous serial I/O setting */
    u0mr = 0x05;                            
    u0c0 = 0x00;                            
    u0rrm = 0;                              
    u0brg = 32-1;                           
                                            
    re_u0c1 = 1;                            
}

void sendTxd0(unsigned char data)
{
    while (ti_u0c1 == 0);       //Wait for transmission buffer emty            
    u0tbl = data;               // Set transmission data 
    te_u0c1 = 1;                // Transmission enabled 
}

unsigned char receiveRxd0 (void)
{
    unsigned char data;
    unsigned char dummy;
    while (ir_s0ric == 0);      //Wait for received data
    ir_s0ric = 0;               //Clear serial reception flag 
    data = u0rbl;               // Get reception data 
    dummy = u0rbh;              // Get error 
    re_u0c1 = 1;                // Reception enabled 
     return data;
}

unsigned int ad_in(unsigned char ch)
{
    /* Set A/D control registers */
    adcon0 = 0x94 + ch;          //ADN8...AN11 an P1_0...P1_3  
    adcon1 = 0x28;               /* 10-bit mode */
    adst = 1;                    /* Conversion start */
    while(adst == 1){}           /* Wait A/D conversion */
    return ad;                   /* return AD value */
}

void messung(void)
{
    unsigned int adr;
    for (adr = 0; adr < 250; adr++)
    {
            ad_buf[adr] = ad_in(0);
    }        
    for (adr = 0; adr < 250; adr++)
    {
            sendTxd0(ad_buf[adr] >> 8);
            sendTxd0(ad_buf[adr] & 0xff);
    }        
}

void main(void)
{
    /*-------------------------------------------------
    -  Change on-chip oscillator clock to Main clock  -
    -------------------------------------------------*/

    prc0 = 1;                   /* Protect off */
    cm13 = 1;                   /* Xin Xout */
    cm15 = 1;                   /* XCIN-XCOUT drive capacity  HIGH */
    cm05 = 0;                   /* Xin on */
    cm16 = 0;                   /* Main clock = No division mode */
    cm17 = 0;
    cm06 = 0;                   /* CM16 and CM17 enable */
    asm("nop");                 /* Waiting for stable of oscillation */
    asm("nop");
    asm("nop");
    asm("nop");
    ocd2 = 0;                   /* Main clock change */
    prc0 = 0;                   /* Protect on */
    sfr_init();  

    while (1)
    {  
           receiveRxd0();
           messung();
    }
}

Für das Oszilloskop sind folgende Hardware-Voraussetzungen nötig:

10 MHz Quarz für 19200 Baud
TXD0 und RXD1 über Inverter an der RS232
VREF an +5V
Eingang P1_0 über 10 kOhm an den Analogeingang

Die serielle Schnittstelle erfordert zwei zusätzliche Leitungen, die hier parallel zu den Anschlüssen für die Debug-Schnittstelle betrieben werden. Es hat sich gezeigt, dass ein Download mit FDT auch funktioniert, wenn TXD0 und RXD0 parallel liegen. Bei der Entwicklung des Programms braucht man daher nur eine COM-Schnittstelle und ein Leitungsinterface für das Flashen und den Betrieb.

Das VB-Programm verwendet die ELEXS-DLL für den Zugriff auf die serielle Schnittstelle. Ein ähnliches Oszilloskop wurde bereits für das SIOS-Interface vorgestellt.

Das C-Projekt für der R8C/15 wurde mit dem C-Compiler NC30 entwickelt. Das MOT-File läuft ganz ohne Änderungen auch auf dem R8C/13, der dem Dezemberheft von Elektor kostenlos beiliegen wird. Einen Überblick über die verfügbare Entwicklungssoftware gibt der Startartikel "R8C und seine Familie" auf der Elektor-Homepage.



Auf der Elektor-Homepage: Infoseite zum R8C/13, Umgang mit dem Compiler