Frage zu Attiny-Programm

Gast #6475339
Lesenswert?

Hallo, ich habe keinen Peil von Attinys, deshalb wende ich mich an euch.
Folgendes Programm soll je nach Potistellung einen Ultraschallton 
ausgeben.
Was ich wissen möchte, welcher Tastgrad hat der Ton? 0,5?
1
//Attiny25 , running @ 1MHZ
2
// Using timer 1
3
//
4
//                           +-\/-+
5
//  Ain0       (D  5)  PB5  1|    |8   VCC
6
//  Ain3       (D  3)  PB3  2|    |7   PB2  (D  2)  INT0  Ain1 <- Potmeter input
7
//  Ain2       (D  4)  PB4  3|    |6   PB1  (D  1)        pwm1 <- Speaker output
8
//                     GND  4|    |5   PB0  (D  0)        pwm0 <- Led output
9
//                           +----+
10

11
//  calculate output frequency
12
//  clockspeed / prescaler / OCR1C = frequency(Hz)
13
//  clockspeed / prescaler / frequency = OCR1C
14
//  OCR1C = OCR1A
15

16
#include <avr/sleep.h>
17
#include <avr/interrupt.h>
18
#include <avr/wdt.h>
19

20
#define potmeter A1
21

22
#define adcDisable() (ADCSRA &= ~(1<<ADEN)) // disable ADC
23
#define adcEnable()  (ADCSRA |=  (1<<ADEN)) // re-enable ADC
24
byte compareValue = 0;
25

26
void setup() {
27
  disableWatchdog();
28
  adcEnable();
29
  compareValue = map(analogRead(potmeter), 0, 1023, 25, 10);
30
  startTimer1(); //20 - 50 kHz -> OCR0A: 25 - 10
31
  adcDisable();
32
  pinMode(0, OUTPUT);
33
  digitalWrite(0, HIGH);
34
  delay(1000);
35
  digitalWrite(0, LOW);
36
  stopTimer1();
37
  enableWatchdog();
38
  enterSleep();
39
}
40

41
void loop() {
42
}
43

44
void startTimer1(void) {
45
  pinMode(1, OUTPUT);
46
  TCNT1 = 0;
47
  TCCR1 = 0;
48
  GTCCR |= (1 << PSR1); //section 13.3.2 reset the prescaler
49
  TCCR1 |= (1 << CTC1); // section 12.3.1 CTC mode
50
  TCCR1 |= (1 << COM1A0); //togle pin PB1 table 12-4
51
  TCCR1 |= (1 << CS10); //prescaler 1 table 12-5
52
  //TCCR1 |= (1 << CS11);
53
  //TCCR1 |= (1 << CS12);
54
  //TCCR1 |= (1 << CS13);
55
  OCR1C = compareValue;
56
  OCR1A = compareValue;
57
}
58

59
void stopTimer1(void) {
60
  TCNT1 = 0;
61
  TCCR1 = 0;
62
}
63

64
void enableWatchdog(void) {
65
  wdt_enable(WDTO_8S); //enable watchdog 
66
}
67

68
void disableWatchdog(void) {
69
  MCUSR &= ~(1<<WDRF); // reset status flag
70
  wdt_disable(); //reset watchdog
71
}
72

73
void enterSleep(void) {
74
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
75
  sleep_mode();
76
}
Beitrag #6475530 wurde von einem Moderator gelöscht.
Gast #6475552
Lesenswert?

c-hater, deine persönlichen Angriffe sind unter aller Kanone. Dagegen 
hilft kein Fachwissen. Dein Auftreten hier ist fast genau so peinlich, 
wie das des Bademeisters, ist dir das nicht bewusst?
Gast #6475553
Lesenswert?

c-hater schrieb im Beitrag #6475530:

> Aber du hast es ja nicht
> einmal für nötig gehalten, zu erwähnen, welcher es denn konkret ist.

Verdammt, in der Schaltungs-Skizze taucht doch eine konkreter Tiny auf, 
das hatte ich glatt übersehen. Ein Tiny25.

Also für den ist das Programm nicht nur wahrscheinlich, sondern sogar 
ganz sicher falsch.

Wie's richtig wäre, steht im Datenblatt.
Beitrag #6475561 wurde von einem Moderator gelöscht.
Beitrag #6475563 wurde von einem Moderator gelöscht.
Gast #6475566
Lesenswert?

Tom schrieb:
> Was ich wissen möchte, welcher Tastgrad hat der Ton? 0,5?

Ja genau. Und das Programm sieht gar nicht schlecht aus. Lass den 
c-hater mal über c haten, den kannst du nicht mehr für voll nehmen. 
Irgendwie hat er sich in seiner Rolle verloren und kommt da nicht mehr 
heraus.
Gast #6475571
Lesenswert?

c-hater schrieb im Beitrag #6475561:
> Wenn du Flachwichser auch irgendwas kompetent zur Sache beigetragen
> hättest, könnte ich den Angriff akzeptieren. Hast du aber nicht.

Du hast schon wieder ein paar Sekunden zu schnell geschossen. Ich habe 
sein Programm geprüft, Zeile für Zeile mit den DB verglichen. Das dauert 
eine Weile. Dabei bin ich zu dem oben genannten Schluss gekommen.
Gast #6475579
Lesenswert?

8 Beiträge und nicht eine Antwort die den TO hilft.

Sauber.

@TO

Lerne mal den Unterschied zwischen SETUP und LOOP.  Kleiner Tipp. Setup 
wird EINMAL ausgeführt und nie wieder.

LOOP wird immer ausgeführt es sei den der Code ist in einer Unterroutine 
beschäftigt.

Du schaltet in dein Setup den Timer EIN und danach wieder aus. Ergo, hat 
das Programm 0 Funktion, außer das es mal für genau 1 Sek. zuckt.

Ich würde den Bereich.
  digitalWrite(0, HIGH);
  delay(1000);
  digitalWrite(0, LOW);

in das LOOP stecken.

Dann wird je Sekunden umgeschaltet.

Aber in einen gebe ich den Leuten hier recht. Dein Code ist Mist.
Gast #6475581
Lesenswert?

Stefan ⛄ F. schrieb:

> Du hast schon wieder ein paar Sekunden zu schnell geschossen. Ich sein
> Programm geprüft, Zeile für Zeile mit den DB verglichen. Das dauert eine
> Weile. Dabei bin ich zu dem oben genannten Schluss gekommen.

Aha, es war dir also bei weitem wichtiger, gegen mich zu feuern, als dem 
TO zu helfen. Das läßt tief blicken...

Im Übrigen hast du fachlich allerdings wirklich Recht. Das Programm 
sieht zwar arduinomäßig Scheiße aus, ist aber tatsächlich korrekt.
Gast #6475589
Lesenswert?

c-hater hater schrieb:
>>Dein Code ist Mist.
> @Schlaumaier
>
> Mann ... der Code ist von Elektor. Nicht von Tom.

Woher soll ich das denn wissen. Trotzdem. Ich würde dann doch gerne mal 
den Original-Code sehen.

Ich würde fast wette das die Befehle :
  digitalWrite(0, HIGH);
  delay(1000);
  digitalWrite(0, LOW);

In die LOOP-Routine gehören.


Aber verrate mir mal woher du das weißt. Habe ich da was übersehen ??!?
(Firma: @home) #6475594
Lesenswert?

c-hater schrieb im Beitrag #6475530:
> Sprich: auf ganzer Linie wegen völliger Unfähigkeit verloren. Sogar die
> Frage im Forum verhauen, weil nichtmal dafür die Kompetenz genügt. Such'
> dir ein anderes Hobby. Briefmarkensammeln z.B...

... könnte von mir sein, alles wird nur noch zugemüllt bzw. das Niveau 
sinkt hier nur!
Gast #6475598
Lesenswert?

c-hater hater schrieb:
>>Aber verrate mir mal woher du das weißt. Habe ich da was übersehen ??!?
> Ja. Scroll mal nach oben.

Ok. Hab ich bei der Zankerei wirklich.

Habe mir gerade mal den Original-code angesehen. Die wollen wirklich das 
das Teil wirklich nur einmal Krach macht. Gut für die Ohren. ;)
Gast #6475600
Lesenswert?

Aber mir hat das was gebracht. Ich kannte die Seite noch nicht. Danke 
C-Hater dafür.

Ach ich schreibe selbst nicht direkt in Arduino-C weil ich C nicht mag. 
Hab mich mit der Syntax nur nebenbei beschäftigt. Was aber nix an meinen 
Aussagen ändert.
Gast #6475651
Lesenswert?

Schlaumaier schrieb:
> Habe mir gerade mal den Original-code angesehen. Die wollen wirklich das
> das Teil wirklich nur einmal Krach macht.

Schlaumaier schrieb:
> Ich würde fast wette das die Befehle :
>   digitalWrite(0, HIGH);
>   delay(1000);
>   digitalWrite(0, LOW);
>
> In die LOOP-Routine gehören.

> Habe ich da was übersehen ??!?

Das Ding soll alle 10 Sekunden "Piep" machen.

Der Watchdog Timer löst alle 10 Sekunden einen Reset aus. Dann soll das 
Ding jeweils eine Sekunde lang einen Ton von sich geben. Dafür ist das 
delay(). Danach legt er sich schlafen, um Strom zu sparen.... bis der 
Watchdog ihn in 9s wieder weckt.

Der Quelltext ist einwandfrei. Die haben von Arduino verwendet, was da 
ist, und die fehlenden Features selbst "zu Fuß" implementiert. Das ist 
völlig Ok. Man muss nicht für jeden Furz eine Library verwenden.
Gast #6475679
Lesenswert?

Schlaumaier schrieb:
> Stefan ⛄ F. schrieb:
>> Danke nicht c-hater, sondern c-hater hater.
>
> och nö.
>
> Ich glaub zwar nicht das er mich mag, aber was Recht ist muss Recht
> bleiben. Und bei mir gilt halt. Wen dir einer etwas guter Tut, sag
> DANKE.

Warum dankst du nicht dem, der den Link schrieb?
Das war "c-hater hater" und nicht der andere ohne Manieren...
(Firma: Hobbytheoretiker) #6475680
Lesenswert?

Stefan ⛄ F. schrieb:
> Das Ding soll alle 10 Sekunden "Piep" machen.

Well Done. Die Details von Dir danach hätte eigentlich der TO liefern 
muessen.

c-hater schrieb im Beitrag #6475530:
> Du hast nicht nur keine Ahnung von ATtinys,
...
> Such' dir ein anderes Hobby. Briefmarkensammeln z.B...

Einen solchen Beitrag als erstes Feedback sieht sehr cholerische aus.
Jeder backt erst einmal kleine Brötchen und stolpert über Grundlagen, 
wenn nicht im engeren Kreis von Familie, Freunden oder Bekannten jemand 
dabei ist, von dem erstmal vieles abzuschauen war.
Gast #6475683
Lesenswert?

pnp schrieb:
> Warum dankst du nicht dem, der den Link schrieb?
> Das war "c-hater hater" und nicht der andere ohne Manieren...

Weil ich beide Verwechselt habe und deinen Text Fehlinterpretiert habe.

Ihr macht mich mit den Mist ganz kirre.

Aber du hast Recht.

DANKE den "c-hater hater" und nicht den anderen.
Gast #6475711
Lesenswert?

Stefan ⛄ F. schrieb:
> Der Watchdog Timer löst alle 10 Sekunden einen Reset aus. Dann soll das
> Ding jeweils eine Sekunde lang einen Ton von sich geben. Dafür ist das
> delay(). Danach legt er sich schlafen, um Strom zu sparen.... bis der
> Watchdog ihn in 9s wieder weckt.

Fast. WD ist auf 8s eingestellt = 8s Schlaf, 1s macht er den Ton, also 
Wiederholung alle 9s. Ist aber marginal ...
Ansonsten richtig analysiert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren