Stap 1: Code met commentaren
Met seriële verbindingen het meest voorkomende probleem is niet instellen van zorg de computer en de PIC aan de dezelfde Baud-Rate, dus ervoor dat u dat doen (als het gebeurt in mijn code).
Ook, zorg ervoor dat u alle van de GNDs samen (PIC, MAX232 en Computer GNDs alle aangesloten) hebt aangesloten.
Ook, zorg ervoor dat u de juiste condensator-waarde voor de max232 (max232 vs. max232A), zie diagram in de instructable voor de juiste waarden.
Zorg er ook voor dat uw computer is het verzenden van de waarden die u denkt dat het sturen. Om dit te doen, houden draden in de kabel DB9 om een seriële loopback. Hierdoor wordt de computer terug te krijgen precies wat het net heeft gestuurd. Hier is een diagram van hoe deze draad:
Dus maak uw matlab-code een seriële lezen direct na de seriële schrijven doen.
U kunt ook vrije seriële poort gebruiken controlesoftware om makesure seriële communicatie occuring correct worden (hier is een voorbeeld http://www.batchconverter.com/FreeSerialPortMonitor-download-20643.shtml).
Anyway, hier is de code:
%##########################################################################
%########################--MATLAB CODE--###################################
%##########################################################################
% Deze code wordt ervan uitgegaan dat u MATLAB vastgehaakt aan een PIC-microcontroller via de seriële poort van de PC door middel van een
% MAX232 IC _OR_ als u geen gebruik maken van een max232 alle u nodig hebt is een 22 kohm weerstand op beperken
% de seriële lijn die de computer met de PIC (aka Pin 3 en/of Pin 2 verbindt, zie hieronder).
% Pin 3 of de DB-9-poort is de TX-lijn, aka de lijn die seriële gegevens van de PC naar de PIC draagt.
% Pin 2 carries seriële gegevens andersom (PIC naar PC) als u wilt dat te doen.
Pin 5% is de DB-9 grond pin welke u gebruiken moet om verbinding maken met de PC-grond met de PIC-grond.
% Dit code ook wordt ervan uitgegaan dat u van COM3 voor seriële communicatie met de PIC gebruikmaakt.
SerPIC = serial('COM3'); % <--dit wijzigen
ingesteld (SerPIC, 'BaudRate', 9600, 'DataBits', 8, 'Pariteit', 'geen', 'StopBits', 1, 'FlowControl', 'geen');
fopen(SerPIC); %--de seriële poort aan de PIC openen
fprintf (SerPIC, '%s', ' 003'); %--Stuur een _three_ cijfer tekenreeks naar de PIC met geen terminator ('%s')
%--003 = 00000011 binair, dus eerst twee LEDs van PIC brandt
fclose(SerPIC) %--Sluit de seriële poort wanneer u klaar bent
Delete(SerPIC)
Schakel SerPIC
% NOOT 1:
% Als MATLAB ooit een seriële fout geeft, het zal waarschijnlijk zeggen 'unable to open serial port' volgende keer dat u
% uitvoeren van het programma, dus u moet opnieuw beginnen van MATLAB
% NOTA 2:
% het nummer moet altijd worden verzonden als een getal van drie cijfers omdat voor sommige reden ik niet mijn PIC krijgen kon te ontvangen
% het nummer wanneer het was niet van een bepaalde lengte (Zie PIC code: DEC3)
%==========================================================================
%==========================================================================
'##########################################################################
'#############################--PIC16F877 CODE--###########################
'##########################################################################
' Deze code wordt ervan uitgegaan dat u de PIC16F877 instellen met één LED op elke regel van de Port D hebben (8 lijnen).
' Op deze manier de PIC volgens het nummer verzenden via seriële vanuit MATLAB een ander patroon van LEDs zullen oplichten.
' Elke LED in serie met een weerstand van 470 ohm moet worden (zie foto hieronder)
'_
' '
' '---Leidde---\ 470 ohm
'PIC' >---/ \/\/\---GND
' '------LED---/
'---'
'
' Deze code ook wordt ervan uitgegaan dat u de TX-lijn van de DB-9 seriële poort verbonden met pin 0 van poort C (PORTC.0)
"Bs2defs.bas" bevatten ' heeft sommige nuttige dingen in het
' DEFINE OSC 4 ' Oscillator snelheid in MHz, dit is niet nodig denk ik
SerI var PORTC.0 ' maken een eenvoudige naam om te verwijzen naar de seriële pin
TRISD = % 00000000 "PortD instellen als een uitvoerpoort
PortD = % 00000000 "LED-poort instellen op alle nullen
GetGhost:
Serin2 SerI, 84, (DEC3 B0) ' een getal van drie cijfers krijgen van seriële pin en zet het in B0 variabl
PortD = B0 ' ingesteld van de lijnen van het PortD volgens dit getal van drie cijfers
GOTO GetGhost
'===========================================================================
'===========================================================================