Stap 10: Extra Tips
Als u wilt doen van seriële communicatie: Seriële software is een Arduino-bibliotheek waarmee u om te zetten of de pennen van de Arduino in seriële pinnen. Meestal wanneer je een Arduino project waarvoor seriële communicatie doet, vermijd je het gebruik van digitale pinnen 0 en 1 omdat zij moeten vrij zijn om seriële gegevens te verzenden. Ik vind om ze te gebruiken voor de 8-bit DAC omdat pinnen 0-7 allemaal deel uit van het PORTD op van de Arduino Atmel328 chip zijn, dit kan ik al van hen in een enkele lijn van code. PORTB heeft slechts 6 pinnen (digitale pinnen 8-13) en PORTC heeft slechts 6 pins (analoog pins 0-5), dus hoeft u geen een 8 bit DAC met deze poorten alleen maken.
Als u wilt gebruik maken van de PWM-pinnen, of anders moet gebruiken verschillende pinnen als de DAC: Als u de PWM-pinnen moet gebruiken kunt u bits manipulatie vrijmaken pinnen 3, 5 en 6 en vervang ze met pinnen 8, 12 en 13. Dat u wilt het nummer 36 verzenden PORTD. U kunt de volgende regels:
variabelen definiëren:
boolean bit3state;
Booleaanse bit5state;
Booleaanse bit6state;
in uw belangrijkste loop:
bit3state = (36 & B00001000) >> 3, //get de derde bit van 36
bit5state = (36 & B00100000) >> 5, //get de vijfde bit van 36
bit6state = (36 & B01000000) >> 6; //get de zesde bit van 36
gegevens verzenden portd w/o verstoren pinnen 3, 5 en 6
PORTD | = (36 & B10010111); //set hoge pinnen hoog met behulp van het nummer 36 met nullen ter vervanging van de bits 3, 5 en 6
PORTD & (36| = B01101000); //set lage pinnen laag met behulp van het nummer 36 met enen vervangen van bits 3, 5 en 6
gegevens verzenden portb w/o pinnen 9, 10 en 11 te verstoren
PORTB | = 0 | (bit3state) | (bit5state << 4) | (bit6state << 5); //set hoge pinnen
PORTB & = 255, ~(1-bit3state) & ~((1-bit5state) << 4) & ~((1-bit6state) << 5); //set lage pinnen
Zorg ervoor dat deze lijnen van het PORTD en PORTB naast elkaar in uw code, wilt u de pinnen op poort d en poort b om over te schakelen op zo dicht bij de dezelfde tijd mogelijk.
Hier is de code van de vorige stap, bewerkt zodat het gebruikt geen elke PWM pinnen. Zoals u in fig 1 zien, heeft de ongefilterde output van de DAC vele discontinuïteiten veroorzaakt door de lag tussen het verzenden van gegevens naar poort d en poort b, evenals het opsplitsen van de opdrachten voor de hoge en lage vaststelling van de pinnen. U kunt zich te ontdoen van de meeste van deze winstdeling met het low-pass filter (fig 2). Als je wilde gebruiken deze techniek overwegen kunt u het verhogen van de cutoff frequentie van uw low-pass filter. Als je wilde maken dit echt goed, kon u uw 5 meest significante bits op d-poort en uw 3 minste significante beetjes naar poort b. Dit zou afnemen, de amplitude van een aantal van de winstdeling, vermindering van de omvang van het lawaai. Ik laat je dat een uitzoeken op uw eigen.
//Sine out, 40kHz sampling rate, w/o using PWM pins //by Amanda Ghassaei
Als u van digitale pinnen uitgeput en meer nodig: Vergeet niet dat u kunt altijd de pinnen van uw analoge als digitale i/o. De volgende functies uitproberen, ze werken net als u te maken met een gewone digitale pin.
digitalWrite (A0, hoge); //set pin A0 hoge
digitalWrite (A0, laag); //set pin A0 laag
digitalRead (A0); de digitale gegevens van de //read van pin A0
Anders, probeer een multiplexer. Wenst u meer digitale uitgangen, kunt de 74HC595 u drie van de Arduino van digitale pinnen omzetten in 8 uitgangen. U kunt zelfs daisy chain meerdere 595 van samen maken veel meer uitgangen pinnen. U kunt uw hele DAC op een van deze chips instellen als u wilde (hoewel het een paar lijnen van code te pakken nemen en zou kunnen vertragen u teveel voor hogere samplingfrequenties zou). De Arduino website is een goede plek om te beginnen te leren over het gebruik van de 595.
Als u meer digitale ingangen nodig, laat de 74HC165 of de CD4021B u drie van de Arduino van digitale pinnen omzetten in 8 ingangen. Nogmaals, de Arduino website is een goede plek om te beginnen met het leren van het gebruik van deze chips.
Wilt u de info gebruiken in dit Instructable met de Mega of andere boards: In dit Instructable sprak ik uitsluitend over de Arduino Uno met Atmel328. Dezelfde code werkt prima op een bord met een Atmel328 of Atmel168 chip op het. U kunt ook dezelfde ideeën met een Mega. Je moet proberen om het koppelen van uw DAC naar elke willekeurige poort die heeft 8 beschikbare pinnen, op die manier kunt u uw DAC met één coderegel richten ("PORTD =") op de Uno, de enige havenstad met 8 beschikbare pinnen is poort d.
foto geeft aan dat de Mega verschillende poorten met 8 pinnen heeft: poorten a, b, c, en l zijn de hand liggende keuzes. Als u geen zorg over het verspillen van analoge pinnen zou ook u poorten f of k.