Ultrasonic måttband (12 / 13 steg)
Steg 12: Konfigurera PIC som ledar-I²C
The I²C initieringsrutinenvoid I2C_Init (void){
TRISA1 = 1;
TRISA2 = 1;
ANSELA = 0b00000000;
SSP1ADD = 0X03;
SSP1STAT = 0X80;
SSP1CON1 = 0X28;
SSP1CON2 = 0X00;
}
Detta är ungefär samma med vad vi gjorde med sensor, men den här gången har vi att inrätta MSSP för att fungera som en mästare. Jag skrev några funktioner för att göra detta, jag kommer att göra några snips för dig med exempelkod, att få dig rullande. Av någon dum anledning jag inte kunde skriva detta som en bild, så här är det, lite fulare, men den fungerar.
Den viktigaste rutinen
Detta är min huvudsakliga koden och I²C kod, vissa program de studsande görs för att ändra skärm luminosity, I²C kommandon utfärdas för att samla in avståndet data från HC-SR04 genom slav processor, sedan numren är analyserad för att visas på 7 segment LED displayen. För lättare routning valde jag siffran katoder gå slumpmässigt till MAX7219, är det sätt lättare att komma runt detta i programvaran och sedan göra några fancy routning för att få rätt spår.
Det kan se ut för liten på vissa skärmar, det är definitivt liten här, i redigeraren, så om du inte kan se det för bra, det är länken, och Visa det på flickr.
De tre överföringar du redan sett när jag presenterade för er slav överföringen. Bussen är samma, så jag brydde mig inte att ta nya snips - själva begreppet är okej, och som är det viktiga.
Med detta sagt talar master PIC nu till slav PIC, ber om avstånd mätningar. När data tas emot ändras visningsvärdena omedelbart för att visa den aktuella avståndsmätning.
Jag lade också till ett användargränssnitt för att ställa in skärmens ljusstyrka. Befälhavaren bilden har en knapp på MCLR stift. Genom att trycka minst hälften av andra, kan användaren gå igenom åtta nivåer av ljusstyrka. Jag satte bara detta i, eftersom MAX7219 har denna funktion inbyggd, och hade knappen liggande ingen nytta ändå.
Jag tänker fortfarande på en bra funktion för att sätta på den andra knappen, som förbinder till slavens PIC MCLR stift. Jag tänkte använda den för att mäta skillnaden mellan den faktiska och den tidigare mätningen, men sensorn ser bara 400 centimeter, det är lite kort, så jag brydde inte mig.
Förslag är välkomna!