program DCC_keypad;
(*
+-----------___------------+
| |
MCLR/VPP * 1 PGD 40* RB7/PGD
RA0/AN0 * 2 RS485 #4 PGC 39* RB6/PGC
RA1/AN1 * 3 RS485 #1 TX RS232 38* RB5
RA2/AN2/VREF- * 4 RS485 #2&3 RX RS232 37* RB4
RA3/AN3/VREF+ * 5 PGM 36* RB3/PGM
RA4/T0CKI * 6 CTS RS232 35* RB2
RA5/AN4/SS * 7 34* RB1
RE0/RD/AN5 * 8 33* RB0/INT
RE1/WR/AN6 * 9 RS232 5+/VDD 32* VDD
RE2/CS/AN7 *10 RS232 GND/VSS 31* VSS
VDD *11 VDD 30* RD7PSP7
VSS *12 VSS 29* RD6/PSP6
OCS1/CLKIN *13 OCS 28* RD5/PSP5
OSC2/CLKOUT *14 OSC 27* RD4/PSP4
RC0/T1OSO/T1CKI *15 26* RC7/RX/DT
RC1/T1OSI/CCP2 *16 25* RC6/TX/CK
RC2/CCP1 *17 24* RC5/SDO
RC3/SCK/SCL *18 23* RC4/SDI/SDA
RD0/PSP0 *19 22* RD3/PSP3
RD1/PSP1 *20 21* RD2/PSP2
| PIC16F874 |
+--------------------------+
*)
//Soft_UART;
var error : byte;
counter, byte_read : byte; // Auxiliary variables
{
var rs485_rxtx_pin : sbit at RC2_bit; // set transcieve pin
rs485_rxtx_pin_direction : sbit at TRISC2_bit; // set transcieve pin direction
}
{ Declarations section }
begin
{ Main program }
//Soft_UART -------------------------------------;
//ANSEL := 0; // Configure AN pins as digital I/O
//ANSELH := 0;
TRISC := 0x00; // Set PORTC as output (error signalization)
PORTC := 0; // No error
//function Soft_UART_Init(var port : byte; rx_pin, tx_pin, baud_rate : dword, inverted : byte): byte;
error := Soft_UART_Init(PORTB,4,5,110,0); // Initialize Soft UART at 110 bps
if (error > 0) then
begin
PORTC := error; // Signalize Init error
while (TRUE) do nop; // Stop program
end;
Delay_ms(500);
for counter := 'z' downto 'A' do // Send bytes from 'z' downto 'A'
begin
Soft_UART_Write(counter);
Delay_ms(500);
end;
while TRUE do // Endless loop
begin
byte_read := Soft_UART_Read(error); // Read byte, then test error flag
if (error <> 0) then // If error was detected
PORTC := error // signal it on PORTB
else
Soft_UART_Write(byte_read); // If error was not detected, return byte read
end;
//Soft_UART -------------------------------------;
end.
DCC_keypad.zip
Slutmålet för detta projekt är att få till en matris av tryckströmbrytare som mjukvarumässigt länkas till att sända ut olika DCC kommandon över XpressNet protokollet.
Men först måste jag få igång in och ut data över seriellkortet, så vad har jag gjort för fel?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
ANSEL & ANSELH ska definitivt ställas till att ingen analog input finns.
Alla TRIS ska ställas rätt.
När man använder software UART brukar man skulle ange i någon definition vilken klocka processorn har, detta för att timingen kan fungera.
Har du sett OM processorn kör alls?
Typ en LED på en port o blinka den?
Eller växla en portpinne för varje bytes som sändas? Då kan man se om den faktisk inte vänrar på något.
Att jag sedan anser soft UART som en styggelse som borde förbjudas är en annan sak.
Nej, jag har inte något som visar att processorn kör.
Ska åtgärda det med lite lysdioder, så jag kan se vad jag gör samt plocka fram mitt oscilloskopet så att det går att kolla signaler.
Detta version 1 av kretskortet, version 2 är inte byggt ännu.
Kan det vara en idé att ta brytkniven och flytta TX & RX från pinne 37 & 38 (där de finns nu) till pinne 25 & 26 för enligt databladet ( https://ww1.microchip.com/downloads/aem ... 30292D.pdf ) sida 16 så ska det finnas en USART Asynchronous där som jag misstänker är en seriellport i hårdvaran?
Tack för svaret det är säkert 20 miljoner år sedan jag skrev program för PIC......
C1 & C2 används för att kristallen ska svänga på rätt sätt o skaplig rätt frekvens.
Om du kör med kristall är de vitala och SKA vara med.
R1 är till för att hålla -RESET till stabilt nivå.
Vital den också.
Den fungerar UTMÄRKT att ha på plats ihop med PICkit3 o nog med PICkit 4 också för ICSP.
Jag ser ingen avkopplingskonding vid PIC'en, kotym är 100nF så när VDD & GND pinnarna som möjligt med så korta o raka ledningar som möjligt.
Min tumregel är att VARJE matning till en logisk krets SKA ha 100nF, för ALLA logiska kretsar.
Det är ett bra sätt att minska problemer med störningar som annars kan vara så djävliga att få saker att flippa ur på tidspunkter där det passar sämst o göra det "oförklarligt".
Lite mer utförligt: C1 & C2 fungerar dels som en belastning för kristallen som då - med den belastning - kör på rätt frekvens.
Men samtidig fungerar de som ett AC-kopplat mittuttag på kristallen vilket ger en 180° fasvänding av utgångssignalen från oscillatorn - o då oscillatorn just är en inverter blir summan 360° = 0° - o skiten svängar.
Har beställt C1 & C2 (22p) samt R1 till -RESET, så bättring är på gång.
Har även beställt lite lysdioder och förkopplingsmotstånd.
Så snart kan jag se var jag pysslar med.
Tack för hjälpen så här långt.