Problème code AtTyni45

Bonjour,

Je suis en trein de construire une cellule de déclenchement pour mon Nikon D3100 qui sera à base de AtTiny45. Pour le branchement et le test avec l'exemple Blink pas de problème. Seulement quand je test mon code le compilateur me donne des erreurs. Voici le code que je voudrais injecter dans l'AtTiny45.

#define PIN_STATUS 0
#define LIGHTNING_TRIGGER_ANALOG_PIN 3
#define triggerVal 5
int lightningVal;

void setup() {
lightningVal = analogRead(LIGHTNING_TRIGGER_ANALOG_PIN);

pinMode(PIN_STATUS, OUTPUT);
digitalWrite(PIN_STATUS, LOW);
}
void loop() {
{
int newLightningVal = analogRead(LIGHTNING_TRIGGER_ANALOG_PIN);

if ((newLightningVal – lightningVal) > triggerVal)

{
digitalWrite(PIN_STATUS, 1);
delay(300);
digitalWrite(PIN_STATUS, 0);
}

lightningVal = newLightningVal;
}
}

Voici les erreurs de compilations.

sketch_jul26a:15: error: stray '' in program
sketch_jul26a.cpp: In function 'void loop()':
sketch_jul26a:15: error: expected )' before 'u2013' sketch_jul26a:23: error: expected )' before 'lightningVal'

Si quelqu'un à une idée du pourquoi et du comment je suis preneur!!! Merci d'avance.

Il faut que tu choisisses la bonne board avant de compiler.

Je te donne un lien sur ce qu'il faut placer dans "Mes documents\Arduino".

http://balbarie.com/arduino/Mes documents-Arduino.zip

Voici le contenu du fichier boards.txt qui va bien pour les Tiny45. Attention il faut que tu fasses un burn bootloader (qui va générer une erreur mais sans conséquence) pour griller les fuses du Tiny pour la clock que tu veux (1, 8 ou 16 MHz).

attiny45-16.name=ATtiny45 - 16 MHz clock (Arduino as ISP)
attiny45-16.upload.protocol=stk500
attiny45-16.upload.maximum_size=4096
attiny45-16.upload.speed=19200
attiny45-16.upload.using=arduinoisp
attiny45-16.bootloader.low_fuses=0xe1
attiny45-16.bootloader.high_fuses=0xdf
attiny45-16.bootloader.extended_fuses=0xff
attiny45-16.build.mcu=attiny45
attiny45-16.build.f_cpu=16000000L
attiny45-16.build.core=arduino:arduino
attiny45-16.build.variant=tiny8

attiny45-8.name=ATtiny45 - 8 MHz clock (Arduino as ISP)
attiny45-8.upload.protocol=stk500
attiny45-8.upload.maximum_size=4096
attiny45-8.upload.speed=19200
attiny45-8.upload.using=arduinoisp
attiny45-8.bootloader.low_fuses=0xe2
attiny45-8.bootloader.high_fuses=0xdf
attiny45-8.bootloader.extended_fuses=0xff
attiny45-8.build.mcu=attiny45
attiny45-8.build.f_cpu=8000000L
attiny45-8.build.core=arduino:arduino
attiny45-8.build.variant=tiny8

attiny45.name=ATtiny45 - 1 MHz clock (Arduino as ISP)
attiny45.upload.protocol=stk500
attiny45.upload.maximum_size=4096
attiny45.upload.speed=19200
attiny45.upload.using=arduinoisp
attiny45.bootloader.low_fuses=0x62
attiny45.bootloader.high_fuses=0xdf
attiny45.bootloader.extended_fuses=0xff
attiny45.build.mcu=attiny45
attiny45.build.f_cpu=1000000L
attiny45.build.core=arduino:arduino
attiny45.build.variant=tiny8

La directive f_cpu ne concerne que le build du soft et va permettre d'adapter les fonctions millis(), micros() et delay() à la fréquence d'horloge.

A noter que la librairie SerialSoftware générera une erreur si f_cpu est inférieur à 8 Mhz.

La directive mcu est tout aussi importante car le Tiny n'est pas agencé comme un mega (timers, ports et aussi jeu d'instruction réduit).

Le dossier variants doit aussi être présent pour l'affectation des pins.

Bon courage.

JLB

PS : J'aime beaucoup les tiny qui permettent même des choses qu'un ATmega ne fait pas (grâce au PLL interne notamment).

Allez avoues que tu l'as fait exprès pour nous poser une colle !!! J'imagine pas qu'on puisse faire ça par erreur de frappe...

Le seul problème dans ton code c'est que le signe moins n'est pas le signe moins : C'est un caractère graphique (code ASCII 96h).

Il suffit de retaper un vrai moins dans ton test (qui lui a le code ASCII 2Dh) pour que ca compile nickel.

Petit farceur va...

JLB

Bonjour,

jihelbi:
Allez avoues que tu l'as fait exprès pour nous poser une colle !!! J'imagine pas qu'on puisse faire ça par erreur de frappe...

Le seul problème dans ton code c'est que le signe moins n'est pas le signe moins : C'est un caractère graphique (code ASCII 96h).

Il suffit de retaper un vrai moins dans ton test (qui lui a le code ASCII 2Dh) pour que ca compile nickel.

Effectivement, je constate la même chose de mon côté.

C'est volontaire (p'tit sadique va :P), involontaire (faut le vouloir quand même :grin:) ou c'est un probléme due au fait que tu as utilisé la fonction "Copy for forum" de l'ide ?

Désolé j'avais pas vue car je l'avais posté sur un autre forum et quand j'ai fait un copier coller ca me donne cà...

Voici les nouvelle erreurs du compilateur avec la lib de jihelbi.

Taille binaire du croquis : 924 octets (d'un max de 4 096 octets)
java.lang.NullPointerException
	at processing.app.debug.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:88)
	at processing.app.debug.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:67)
	at processing.app.Sketch.upload(Sketch.java:1706)
	at processing.app.Sketch.exportApplet(Sketch.java:1662)
	at processing.app.Sketch.exportApplet(Sketch.java:1634)
	at processing.app.Editor$DefaultExportHandler.run(Editor.java:2346)
	at java.lang.Thread.run(Thread.java:680)

Menu -> "File" -> "Upload using programmers" ou avec le raccourci CTRL+MAJ+U ou encore en maintenant la touche MAJ + appui sur le bouton upload :wink:

En français version 1.01 c'est "Téléverser avec un programmateur". Cette traduction est d'un kitch absolu masis cela m'a aider à la mémoriser...

JLB

PS : Selon ADOPI un téléverseur est un délinquant... Le téléversage est interdit...

Franchement merci de votre aide :wink:

Voici de nouvelle erreur du débogueur:

Taille binaire du croquis : 924 octets (d'un max de 4 096 octets)
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny45
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny45
avrdude: stk500_recv(): programmer is not responding

qu'utilise tu pour programmer ?

Une Arduino Uno avec la version 1.0.1 de l'IDE Arduino + la lib AtTiny que tu m'a donné. Je travail sous Mac OX Lion.

metalos:
Une Arduino Uno avec la version 1.0.1 de l'IDE Arduino + la lib AtTiny que tu m'a donné. Je travail sous Mac OX Lion.

La lib en question c'est arduino-tiny ?
http://code.google.com/p/arduino-tiny/

J'ai jamais eu aucun probléme avec cette lib ...

Mais non ce n'est pas une lib. C'est un fichier boards. Cela n'a rien à voir et ne concerne que l'IDE Arduino. Les libs spécifiques aux Tiny sont incluses dans le package Arduino.

  • As tu téléverser le soft ArduisoISP dans ton Arduino ?
  • As tu mis un condensateur de 10 uF entre masse et reset avant de téléverser ton programme Tiny ?
  • As tu bien mis les pins 13, 12, 11 et 10 de l'Arduino sur pin 7, 6, 5 et 1 du Tiny ?
  • As tu débrancher ce qui dans ton montage gênerait la programmation par ISP ?

Je programme très souvent des Tiny sans aucun souci, donc il n'y a pas de raison.

Pour ton caractère "-" graphique tu n'as qu'à utiliser un PC comme tout le monde. Laisse donc les Macs aux artistes si ca leur plait de trouver cela mieux cela s'explique par le fait qu'ils fonctionnent sur un registre subjectif et affectif très différent de celui de l'ingénieur... LOL...

JLB

Mac n'a rien à voir je programme sous linux windows et Mac. Dans le doute je vais tenter sous windows ou linux voir si j'ai le même résultat.

Et Attention......... Tu mélange tout.... Je disais cela pour ton caractère "-" à la base du post.

Pour ton erreur de programmation cela n'a rien à voir. Perds pas ton temps à des essais inutiles. Si tu peux téléverser via le bootloader de l'Arduino tu peux forcément téléverser via programmateur. Cherche le problème ailleurs. Je t'ai donné des pistes dans mon post.

JLB

jihelbi:
Mais non ce n'est pas une lib. C'est un fichier boards. Cela n'a rien à voir et ne concerne que l'IDE Arduino. Les libs spécifiques aux Tiny sont incluses dans le package Arduino.

Le fichier boards.txt seul ne suffit pas !

Le core arduino n'est conçu que pour les :

ATmega8
ATmega168
ATmega328
ATmega1280
ATmega2560

Certain autres ATmega sont compatible, mais pas les ATtiny ...
Je ne sait pas comment tu fait pour compiler "en arduino" sur un ATtiny SANS core arduino optimisé pour la série ATtiny4x/8x !

Pour l'erreur, aprés un rapide coup d'oeil sur la page de man de avrdude il semblerai que ça ne soit pas une erreur empêchant la programmation.
Je sait pas pourquoi ça te le fait à toi en particulier mais normalement le programme doit être dans ton ATtiny même avec l'erreur.
Le plus simple et de tester avec un blink et voir si ça clignote :wink:

jihelbi:
Pour ton caractère "-" graphique tu n'as qu'à utiliser un PC comme tout le monde. Laisse donc les Macs aux artistes si ca leur plait de trouver cela mieux cela s'explique par le fait qu'ils fonctionnent sur un registre subjectif et affectif très différent de celui de l'ingénieur... LOL...

Oula, quel beau troll bien poilu ... :grin:
Tu sait même sous windows/linux rien ne t'interdit d'insérer un caractére unicode U+02D7 :wink:

Absolument faux skywood...

attiny45.build.mcu=attiny45
attiny45.build.f_cpu=1000000L
attiny45.build.core=arduino:arduino
attiny45.build.variant=tiny8

Voila ce qui indique (dans les fichiers boards.txt de l'utilisateur) à l'IDE Arduino de compiler pour un Tiny. Rien d'autre à faire que de choisir la bonne board.

Voici à nouveau mon lien sur ce qui va bien pour les chips ATtiny et ATmega autre que le 328P et qui permettent aussi de faire du FULL FLASH ou de charger l'Optiboot et aussi et surtout de positionner les fusibles du Tiny pour varier sa clock.

http://balbarie.com/arduino/Mes documents-Arduino.zip

JLB

Skywood tu te trompes aussi la dessus :

avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny45
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny45
avrdude: stk500_recv(): programmer is not responding

Si les deux premières lignes sont effectivement des messages sans conséquence, la troisième ligne indique clairement que la communication avec le programmateur ne fonctionne pas.

Je réitère mes conseils :

  • As tu téléverseé le soft ArduisoISP dans ton Arduino ?
  • As tu mis un condensateur de 10 uF entre masse et reset avant de téléverser ton programme Tiny ?

JLB

As tu téléverseé le soft ArduisoISP dans ton Arduino ?

Oui

As tu mis un condensateur de 10 uF entre masse et reset avant de téléverser ton programme Tiny ?

Oui

Pour les branchements je pense être bon...

As tu choisi dans le menu options le programmateur "Arduino as ISP" ?

As tu choisi dans le menu type de carte l'un des 3 ATtiny45 qui sont apparus maintenant que tu as placé mes fichiers au bon endroit ?

JLB

Détail complet de la manip :

  1. Enlever le condensateur de 10 uF de l'Arduino.
  2. Choisir comme type de carte "Arduino Uno" (je crois que c'est ta carte).
  3. Téléverser normalement (pas téléverser avec un programmateur) le programme exemple "Arduino as ISP".
  4. Placer un condensateur de 10uf entre GND et RESET de l'Arduino.
  5. Connecter les pins 13, 12, 11 et 10 de l'Arduino Uno aux pins 7, 6, 5 et 1 de l'ATtiny.
  6. Choisir comme programmateur "Arduino as ISP".
  7. Charger ton programme pour le Tiny.
  8. Choisir comme type de carte une des ATtiny45 que tu vois apparaître depuis que tu as mes fichiers.
  9. Dans le menu fichier choisir "Téléverser avec un programmateur".

Pendant la programmation tu dois voir la led TX de l'Arduino clignoter très vite (presque fixe) puis la la led RX faire de même (c'est la phase de relecture).

A la fin tu n'as plus que les deux premières lignes d'erreur et ton Tiny est programmé.

Attention le choix d'une carte à 1, 8 ou 16 MHz ne jouent que sur la compilation (adaptation des fonctions liées aux timers). Pour que le Tiny changent exffectivement de fréquence il faut faire "Graver la séquence d'initialisation". Cela génère une erreur mais fonctionne car la programmation des fuses est effectuée en tout premier.

JLB