ATtiny 2313 programmeren met Arduino Uno
5 berichten
• Pagina 1 van 1
ATtiny 2313 programmeren met Arduino Uno
Hallo,
Ik zit met het probleem, dat ik een 4 digit counter (eenvoudige kookwekker) wil programmeren op een ATtiny 2313.
Het programma is afkomstig van: http://www.hobbytronics.co.uk/arduino-countdown-timer
Het programma op de Arduino Uno werkt goed maar als ik de toewijzig van de pinnen van het display aanpas aan de ATtiny 2313 geeft hij met het compileren de volgende melding:
- /Applications/Arduino 1.05.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp: In function 'void __vector_7()':
/Applications/Arduino 1.05.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp:130: error: 'PE' was not declared in this scope
Voor alle duidelijkheid, ik werk met versie 1.05 en heb de extra files voor de ATTiny geïnstalleerd.
Ik gebruik de ATtiny van de GitHub repository en heb deze correct geïnstalleerd. Met de andere ATTiny 25/45 heb ik nooit geen problemen ondervonden.
Dit is de eerste keer dat ik een ATtiny 2313 wil programmeren.
Wie kan mij verder helpen?
PROGRAMMA:
// BOARD ATINY 2313 - INTERNAL 1 MHz CLOCK !!!!
int digit1 = PD5; //PWM Display pin 1
int digit2 = PB2; //PWM Display pin 2
int digit3 = PB3; //PWM Display pin 6
int digit4 = PB4; //PWM Display pin 8
int segA = PD1; //Display pin 14
int segB = PD0; //Display pin 16
int segC = PA0; //Display pin 13
int segD = PA1; //Display pin 3
int segE = PD2; //Display pin 5
int segF = PD3; //Display pin 11
int segG = PD4; //Display pin 15
int start_num=210; // Number to countdown from
unsigned long time;
void setup() {
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
}
void loop() {
//long startTime = millis();
if((millis()/1000) < start_num){
displayNumber(start_num -(millis()/1000));
}
else {
// reached zero, flash the display
time=millis();
while(millis() < time+500) {
displayNumber(0); // display 0 for 0.5 second
}
time=millis();
while(millis() < time+500) {
lightNumber(0); // Turn display off for 0.5 second
}
}
//while( (millis() - startTime) < 2000) {
//displayNumber(1217);
//}
//delay(1000);
}
//Display brightness
//Each digit is on for a certain amount of microseconds
//Then it is off until we have reached a total of 20ms for the function call
//Let's assume each digit is on for 1000us
//If each digit is on for 1ms, there are 4 digits, so the display
//is off for 16ms.
//That's a ratio of 1ms to 16ms or 6.25% on time (PWM).
//Let's define a variable called brightness that varies from:
//5000 blindingly bright (15.7mA current draw per digit)
//2000 shockingly bright (11.4mA current draw per digit)
//1000 pretty bright (5.9mA)
//500 normal (3mA)
//200 dim but readable (1.4mA)
//50 dim but readable (0.56mA)
//5 dim but readable (0.31mA)
//1 dim but readable in dark (0.28mA)
void displayNumber(int toDisplay) {
#define DISPLAY_BRIGHTNESS 200
#define DIGIT_ON HIGH
#define DIGIT_OFF LOW
long beginTime = millis();
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
// digitalWrite(digit1, DIGIT_ON);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
break;
}
//Turn on the right segments for this digit
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
//Display digit for fraction of a second (1us to 5000us, 500 is pretty good)
//Turn off all segments
lightNumber(10);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
}
while( (millis() - beginTime) < 10) ;
//Wait for 20ms to pass before we paint the display again
}
//Given a number, turns on those segments
//If number == 10, then turn off number
void lightNumber(int numberToDisplay) {
#define SEGMENT_ON LOW
#define SEGMENT_OFF HIGH
switch (numberToDisplay){
case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 2:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 3:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 4:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 6:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 7:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 8:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
}
}
Ik begrijp niet wat er fout gaat, wie kan mij verder helpen met dit vraagstuk?
Fleur
Ik zit met het probleem, dat ik een 4 digit counter (eenvoudige kookwekker) wil programmeren op een ATtiny 2313.
Het programma is afkomstig van: http://www.hobbytronics.co.uk/arduino-countdown-timer
Het programma op de Arduino Uno werkt goed maar als ik de toewijzig van de pinnen van het display aanpas aan de ATtiny 2313 geeft hij met het compileren de volgende melding:
- /Applications/Arduino 1.05.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp: In function 'void __vector_7()':
/Applications/Arduino 1.05.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp:130: error: 'PE' was not declared in this scope
Voor alle duidelijkheid, ik werk met versie 1.05 en heb de extra files voor de ATTiny geïnstalleerd.
Ik gebruik de ATtiny van de GitHub repository en heb deze correct geïnstalleerd. Met de andere ATTiny 25/45 heb ik nooit geen problemen ondervonden.
Dit is de eerste keer dat ik een ATtiny 2313 wil programmeren.
Wie kan mij verder helpen?
PROGRAMMA:
// BOARD ATINY 2313 - INTERNAL 1 MHz CLOCK !!!!
int digit1 = PD5; //PWM Display pin 1
int digit2 = PB2; //PWM Display pin 2
int digit3 = PB3; //PWM Display pin 6
int digit4 = PB4; //PWM Display pin 8
int segA = PD1; //Display pin 14
int segB = PD0; //Display pin 16
int segC = PA0; //Display pin 13
int segD = PA1; //Display pin 3
int segE = PD2; //Display pin 5
int segF = PD3; //Display pin 11
int segG = PD4; //Display pin 15
int start_num=210; // Number to countdown from
unsigned long time;
void setup() {
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
}
void loop() {
//long startTime = millis();
if((millis()/1000) < start_num){
displayNumber(start_num -(millis()/1000));
}
else {
// reached zero, flash the display
time=millis();
while(millis() < time+500) {
displayNumber(0); // display 0 for 0.5 second
}
time=millis();
while(millis() < time+500) {
lightNumber(0); // Turn display off for 0.5 second
}
}
//while( (millis() - startTime) < 2000) {
//displayNumber(1217);
//}
//delay(1000);
}
//Display brightness
//Each digit is on for a certain amount of microseconds
//Then it is off until we have reached a total of 20ms for the function call
//Let's assume each digit is on for 1000us
//If each digit is on for 1ms, there are 4 digits, so the display
//is off for 16ms.
//That's a ratio of 1ms to 16ms or 6.25% on time (PWM).
//Let's define a variable called brightness that varies from:
//5000 blindingly bright (15.7mA current draw per digit)
//2000 shockingly bright (11.4mA current draw per digit)
//1000 pretty bright (5.9mA)
//500 normal (3mA)
//200 dim but readable (1.4mA)
//50 dim but readable (0.56mA)
//5 dim but readable (0.31mA)
//1 dim but readable in dark (0.28mA)
void displayNumber(int toDisplay) {
#define DISPLAY_BRIGHTNESS 200
#define DIGIT_ON HIGH
#define DIGIT_OFF LOW
long beginTime = millis();
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
// digitalWrite(digit1, DIGIT_ON);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
break;
}
//Turn on the right segments for this digit
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
//Display digit for fraction of a second (1us to 5000us, 500 is pretty good)
//Turn off all segments
lightNumber(10);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
}
while( (millis() - beginTime) < 10) ;
//Wait for 20ms to pass before we paint the display again
}
//Given a number, turns on those segments
//If number == 10, then turn off number
void lightNumber(int numberToDisplay) {
#define SEGMENT_ON LOW
#define SEGMENT_OFF HIGH
switch (numberToDisplay){
case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 2:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 3:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 4:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 6:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 7:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 8:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
}
}
Ik begrijp niet wat er fout gaat, wie kan mij verder helpen met dit vraagstuk?
Fleur
Advertisement
Re: ATtiny 2313 programmeren met Arduino Uno
Lees dit eens: https://github.com/damellis/attiny/issues/8
Is wel onder 1.02 maar geldt misschien nog steeds voor 1.05?
Is wel onder 1.02 maar geldt misschien nog steeds voor 1.05?
Laatst gewijzigd door Rudi op 21 Feb 2014, 20:29, in totaal 1 keer gewijzigd.
Arduinows!
Why do computer programmers confuse Halloween with Christmas? Because Oct 31 = Dec 25
I got 01100011 problems but a bit ain't 00000001
Why do computer programmers confuse Halloween with Christmas? Because Oct 31 = Dec 25
I got 01100011 problems but a bit ain't 00000001
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: ATtiny 2313 programmeren met Arduino Uno
De boodschap is op zich wel duidelijk in die zin dat : variabele PE of define oid is niet bekend in hardwareserial.cpp. Ik heb net ff jouw source code door mijn eclipse omgeving gegooid (die compileert ook met 1.0.5) waarbij ik gebruik maak van deze libraries: http://code.google.com/p/arduino-tiny/d ... 0-0020.zip
En dat compileert als een speer
En dat compileert als een speer
Re: ATtiny 2313 programmeren met Arduino Uno
Hallo Nico,
Dat is snel en goed nieuws, kun je me ook helpen waar ik deze files moet plaatsen in mijn bestanden. Ik kan dit niet teug vinden in de files.
Het lijkt erop, dat de problemen niet zo groot zijn, nu nog bij mij werkend zien te krijgen.
Fleur
NICO,
IK HEB HET AL DRAAIEND HOOR, TEXT-FILE AANGEPAST EN PROBLEEM IS UIT DE WERELD, MET EEN WOORD GEWELDIG.
IEDEREEN BEDANKT VOOR DE INPUT.
FLEUR
Dat is snel en goed nieuws, kun je me ook helpen waar ik deze files moet plaatsen in mijn bestanden. Ik kan dit niet teug vinden in de files.
Het lijkt erop, dat de problemen niet zo groot zijn, nu nog bij mij werkend zien te krijgen.
Fleur
NICO,
IK HEB HET AL DRAAIEND HOOR, TEXT-FILE AANGEPAST EN PROBLEEM IS UIT DE WERELD, MET EEN WOORD GEWELDIG.
IEDEREEN BEDANKT VOOR DE INPUT.
FLEUR
Re: ATtiny 2313 programmeren met Arduino Uno
Ik wil de attiny 2313/4313 en nog andere types zoals de attiny 84 kunnen selecteren in een keuzelijstje.
Op http://code.google.com/p/arduino-tiny/d ... 0-0020.zip (nog bedankt voor deze link!) heb ik het mapje tiny onder de hardwaremap, naast o.a de map tools gezet.
Maar wat moet ik nog meer doen om die lijst er wel in te krijgen?
Ik gebruik Arduino versie 1.6.8
Op http://code.google.com/p/arduino-tiny/d ... 0-0020.zip (nog bedankt voor deze link!) heb ik het mapje tiny onder de hardwaremap, naast o.a de map tools gezet.
Maar wat moet ik nog meer doen om die lijst er wel in te krijgen?
Ik gebruik Arduino versie 1.6.8
5 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 76 gasten