ATtiny 2313 programmeren met Arduino Uno

Arduino specifieke Software
Berichten: 9
Geregistreerd: 21 Feb 2014, 19:34

ATtiny 2313 programmeren met Arduino Uno

Berichtdoor Fleur » 21 Feb 2014, 20:00

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

Advertisement

Gebruikers-avatar
Berichten: 270
Geregistreerd: 30 Dec 2012, 11:42

Re: ATtiny 2313 programmeren met Arduino Uno

Berichtdoor Rudi » 21 Feb 2014, 20:28

Lees dit eens: https://github.com/damellis/attiny/issues/8
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

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: ATtiny 2313 programmeren met Arduino Uno

Berichtdoor nicoverduin » 21 Feb 2014, 20:29

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
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 9
Geregistreerd: 21 Feb 2014, 19:34

Re: ATtiny 2313 programmeren met Arduino Uno

Berichtdoor Fleur » 21 Feb 2014, 20:47

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

Berichten: 1
Geregistreerd: 28 Mei 2016, 23:06

Re: ATtiny 2313 programmeren met Arduino Uno

Berichtdoor Trebor » 28 Mei 2016, 23:49

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

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 76 gasten