Heeft iemand een idee waarom een PC niet RS232 signalen van een PIC kan decoderen.
Ik lees de seriele poort uit met (demo programma van python voor seriële communicatie)
python miniterm.py -p /dev/ttyS0 -D -b 9600
--- Miniterm --- type Ctrl-D to quit
\x00\x00\x00\x00\x00\x00\x00\x00\x00
--- exit ---
Ik verwacht : \x10
De gegevens worden in de PIC met volgende programma verstuurd.
#include <stdlib.h>
#include <stdio.h>
#include "/usr/share/sdcc/include/pic/pic16f737.h"
#define PIC_CLK 20000000 //MHz
#define BAUD 9600
#define BRGH_SET 1
#define SPBRG_SET (PIC_CLK/(16UL * BAUD))-1
void rs232_init()
{
SPBRG=SPBRG_SET; // Baud Rate register, calculated by macro
BRGH=BRGH_SET;
SYNC=0; // Disable Synchronous/Enable Asynchronous
SPEN=1; // Enable serial port
TXEN=0; // Enable transmission mode
TXEN=1; // Enable transmission mode
}
void main(void)
{
rs232_init();
TRISB &= 0x00; // Trigger for scope
while(1)
{
PORTB =0xff;
TXREG = 0x10;
PORTB = 0x00;
while(!TRMT);
}
}
[Bericht gewijzigd door Henry S. op (1%)]
hallo geert
als ik zo naar je schema kijk dan mis ik een aantal condensatoren.die verbonden moeten worden aan de max232.dezen zorgen er voor om de min 15 en plus 15 votl te kunen maken.
De condesatoren e.d. zijn wel degelijk aanwezig in de schakeling.
Het signaal niveau op zit op +/- 9V (scope = DC).
De waarden van de condensatoren zijn 0,1uF.
Maar als ik naar je scripje kijk dan zie ik nergens dat je iets doet met RCREG .Hier komt je data binnen dat je verstuurt via je pc.
Ondertussen heb ik al wat vooruitgang gemaakt.
met RCREG doe ik niets omdat ik enkel verstuur naar PC (async).
- condensators bij max 232 van .1uf vervangen door 1uf.
- wdt clearen voor elke tx.
- gebruik maken van de interne oscilator (_INTRC_IO :
Als ik in echter in HS_OSC in de config word schrijf valt de crystal
oscillator stil. enig idee?)
Volgende lukt : 7 bits communicatie lukt.
#include "/usr/share/sdcc/include/pic/pic16f737.h"
#include "clrwdt.h"
//#include "read_serial.h"
#define PIC_CLK 8000000 //MHz
#define BAUD 9600
#define BRGH_SET 1
#define SPBRG_SET (PIC_CLK/(16UL * BAUD))-1
typedef unsigned int config1;
config1 at 0x2007 __CONFIG = _CP_ALL & _INTRC_IO;
typedef unsigned int config2;
config2 at 0x2008 __CONFIG2 = _IESO_ON;
void rs232_init()
{
SPBRG=SPBRG_SET; // Baud Rate register, calculated by macro
BRGH=BRGH_SET;
SYNC=0; // Disable Synchronous/Enable Asynchronous
SPEN=1; // Enable serial port
TXEN=0; // Enable transmission mode
TXEN=1; // Enable transmission mode
}
void main(void)
{
unsigned char i;
IRCF0 = 1;
IRCF1 = 1;
IRCF2 = 1;
T1OSCEN = 1;
i = 0;
rs232_init();
while(1)
{
i++;
CLRWDT();
TXREG = i & 0xff;
while(!TRMT);
}
}
Gebruik code-tags voor de duidelijkheid, zie de FAQ
[Bericht gewijzigd door Henry S. op (3%)]
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
als je xtal op 8mhz draait(dat maak ik tenminste op uit je programma moet je xt_osc gebruiken ipv van intrc of hs_osc
verder hoe groot zijn je condensators bij je xtal en hoe is die geplaatst
De condensators bij het xtal(20MHz) hebben een waarde van 22pF.
Als ik HS_OSC in het config word zet stopt de Xtal, zonder HS_OSC heb ik wel 20MHZ signaal op RA6 en RA7.
Daarom heb ik gebruik gemaakt van INTRC_IO (FOSC2:FOSC0 = 100)
REGISTER 15-1: CONFIGURATION WORD REGISTER 1 (ADDRESS 2007h)
bit 4, 1-0 FOSC2:FOSC0: Oscillator Selection bits
111 = EXTRC oscillator; CLKO function on OSC2/CLKO/RA6
110 = EXTRC oscillator; port I/O function on OSC2/CLKO/RA6
101 = INTRC oscillator; CLKO fun on RA6 and port I/O fun on RA7
100 = INTRC oscillator; port I/O fun RA7 and RA6
011 = EXTCLK; port I/O function on OSC2/CLKO/RA6
010 = HS oscillator
001 = XT oscillator
000 = LP oscillator
Wat betreft de interne clock frequentie volgens het datasheet tot 8MHz.
Oscillators:
Three Crystal modes:
- LP, XT, HS (up to 20 MHz)
Two External RC modes
One External Clock mode:
- ECIO (up to 20 MHz)
Internal Oscillator Block:
- 8 user-selectable frequencies
(31 kHz, 125 kHz, 250 kHz, 500 kHz, 1 MHz, 2 MHz, 4 MHz, 8 MHz)
REGISTER 4-2: OSCCON: OSCILLATOR CONTROL REGISTER
bit 0
bit 7 Unimplemented: Read as ‘0’
bit 6-4 IRCF<2:0>: Internal RC Oscillator Frequency Select bits
000 = 31.25 kHz
001 = 125 kHz
010 = 250 kHz
011 = 500 kHz
100 = 1 MHz
101 = 2 MHz
110 = 4 MHz
111 = 8 MHz