Hi,
see code below where i use digitalWrite to write to PB0 (dp). Problem is, when simulating it in proteus, it writes to PA0 instead! i tried to use “const int dp = 10”, but then nothing happens… what is going on?
This code will be for a clock, but its not finished.
void displayWrite (byte);
void displayPrint (int);
void selectDisplay(byte);
void selectDisplay(byte);
const int dp = PB0; //:
#define dispOnTime 1000
void setup() {
// put your setup code here, to run once:
pinMode(PA0, OUTPUT); //a
pinMode(PA1, OUTPUT); //b
pinMode(PA2, OUTPUT); //c
pinMode(PA3, OUTPUT); //d
pinMode(dp, OUTPUT);
pinMode(9, OUTPUT); //PB1 selectA
pinMode(8, OUTPUT); //PB2 selectB
}
void loop() {
// put your main code here, to run repeatedly:
displayPrint(754);
}
void displayPrint (int sec)
{
byte dm = sec/600; //dec minutes
byte um = sec/60 - dm*10; //uni minutes
byte ds = (sec%60)/10; //dec seconds
byte us = (sec%60) - ds*10; //uni seconds
selectDisplay(0);
displayWrite(dm);
delay(dispOnTime);
selectDisplay(1);
displayWrite(um);
delay(dispOnTime);
selectDisplay(2);
displayWrite(ds);
delay(dispOnTime);
selectDisplay(3);
displayWrite(us);
delay(dispOnTime);
digitalWrite(dp, HIGH);
delay(dispOnTime);
digitalWrite(dp, LOW);
delay(dispOnTime);
}
// take the 2 bits from sel to select display through PB1 and PB2
void selectDisplay(byte sel)
{
if (sel == 0) {
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}
else if (sel == 1) {
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
}
else if (sel == 2) {
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
}
else {
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
}
}
//take the nibble and write to PA0, PA1, PA2, PA3.
void displayWrite (byte nibble)
{
PORTA = (PORTA & 0xf0) | (nibble & 0x0f);
}