MATLAB till PIC seriellt gränssnitt (1 / 1 steg)
Steg 1: Kod med kommentarer
Med seriella anslutningar det vanligaste problemet inte är att se datorn och PIC att samma bithastighet, så till att du gör det (som det görs i min kod).
Kontrollera också att du har anslutit alla GNDs tillsammans (PIC, MAX232 och dator GNDs alla anslutna).
Se också till att du använder rätt kondensator värdet för max232 (max232 vs max232A), se diagram i instructable för korrekta värden.
Se också till att datorn skickar de värden du tycker det sänder. För att göra detta, stick ledningar till DB9 kabeln att göra en följetong loopback. Detta gör att datorn får tillbaka exakt vad det har precis skickat. Här är ett diagram över hur tråd upp detta:
Så gör din matlab-kod gör en seriell läsa rätt efter den seriella skriva.
Du kan också använda gratis seriell port övervakning programvara att makesure seriell kommunikation är occuring ordentligt (här är ett exempel http://www.batchconverter.com/FreeSerialPortMonitor-download-20643.shtml).
Hursomhelst, här är koden:
%##########################################################################
%########################--MATLAB CODE--###################################
%##########################################################################
% Här koden förutsätter att du har MATLAB ansluten till en PIC mikrokontroller via datorns serieport genom en
% MAX232 IC _OR_ om du inte använder en max232 allt du behöver är en 22 kohm begränsa motstånd på
% den seriella linje som ansluter datorn till PIC (aka Pin 3 och/eller Pin 2, se nedan).
% Stift 3 eller DB-9 porten är TX linjen, aka linjen som bär data från PC till PIC.
% Stift 2 bär seriella data åt andra hållet (PIC till PC) om du vill göra detta.
Stift 5% är DB-9 marken pin som du bör använda för att ansluta PC marken med PIC marken.
% Kodas detta också förutsätter att du använder COM3 för seriell kommunikation med PIC.
SerPIC = serial('COM3'); % <--ändra detta på lämpligt sätt
Ange (SerPIC, "Hastighet", 9600, "DataBits', 8,"paritet', 'ingen', 'StopBits', 1, 'FlowControl', 'ingen');
fopen(SerPIC); % - Öppna den seriella porten till PIC
fprintf (SerPIC, '%s', ' 003'); % - Skicka en _three_ siffra sträng till PIC med ingen terminator ('%s')
%--003 = 00000011 i binär, så först två lysdioder av PIC tänds
fclose(SerPIC) %--stänga den seriella porten när du är klar
Delete(SerPIC)
Rensa SerPIC
% ANMÄRKNING 1:
% om MATLAB någonsin ger en serial fel, det kommer troligen säga "kan inte öppna serieporten" nästa gång du
% springa programmet, så du måste starta om MATLAB
% ANMÄRKNING 2:
% numret måste alltid skickas som ett tresiffrigt tal eftersom av någon anledning inte kunde jag få min bild att ta emot
% antal när det inte var en angiven längd (se PIC-kod: DEC3)
%==========================================================================
%==========================================================================
'##########################################################################
'#############################--PIC16F877 CODE--###########################
'##########################################################################
"Denna kod förutsätter att du har PIC16F877 in med en LED på varje rad i Port D (8 linjer).
"Detta sätt PIC tänds olika mönster av lysdioder enligt skickar via följetong från MATLAB.
"Varje LED bör vara i serie med en 470 ohms motstånd (se bild nedan)
'_
' '
""---Ledde---\ 470 ohm
'Bild' >---/ \/\/\---GND
' '------LED---/
'---'
'
"Denna kod förutsätter också att du har TX fodra av den DB-9 seriella porten ansluten till stift 0 port C (PORTC.0)
Inkluderar "bs2defs.bas" "har vissa nyttiga saker i den
' Definiera OSC 4 ' Oscillator hastighet i MHz, detta behövs inte antar jag
SerI var PORTC.0 ' göra ett lätt namn att hänvisa till den seriella pin
TRISD = % 00000000 ' in PortD som en utdataport
PortD = % 00000000 "ställer in LED porten till alla nollor
GetGhost:
Serin2 SerI, 84, (DEC3 B0) "få ett tresiffrigt nummer från seriella stift och Lägg den i B0 variabl
PortD = B0 "in fodrar av PortD enligt denna tresiffrigt nummer
Gå till GetGhost
'===========================================================================
'===========================================================================