Forum: Mikrocontroller und Digitale Elektronik Frage zu Attiny-Programm


von Tom (Gast)


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.
von Stefan F. (Gast)


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?

von c-hater (Gast)


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.

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
> Verdammt,

Ja genau.

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

Kläre uns auf, anstatt nur zu meckern.

Beitrag #6475561 wurde von einem Moderator gelöscht.
Beitrag #6475563 wurde von einem Moderator gelöscht.
von Stefan F. (Gast)


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.

von c-hater hater (Gast)


Lesenswert?

Das Programm ist von ELEKTOR
https://issuu.com/meta727/docs/elektor_electronic__usa__09-10_2017
Seite 102/103

Tom hat einfach nur dazu etwas wissen wollen.

Warum C-Hater deswegen hohl dreht?

von batman (Gast)


Lesenswert?

Nee, dafür brauchen wir beim Arduino den c++-hater.

von Stefan F. (Gast)


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.

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb im Beitrag #6475561:
> Mein Beitrag hingegen könnte ihm u.U. weiterhelfen

Inwiefern?

von pnp (Gast)


Lesenswert?

c-hater schrieb im Beitrag #6475561:
> Flachwichser

Der "Hasser" ist mal wieder in Hochform... ;-(

von Schlaumaier (Gast)


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.

von Thomas E. (thomase)


Lesenswert?

pnp schrieb:
> Der "Hasser" ist mal wieder in Hochform...

Ach was. Seine Domina ist im Corona-Lockdown.

von c-hater (Gast)


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.

von c-hater (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> c-hater schrieb im Beitrag #6475561:
>> Mein Beitrag hingegen könnte ihm u.U. weiterhelfen
>
> Inwiefern?

Darstellung der Eigenschaften des CTC-Mode...

von c-hater hater (Gast)


Lesenswert?

>Dein Code ist Mist.
@Schlaumaier

Mann ... der Code ist von Elektor. Nicht von Tom.

von Schlaumaier (Gast)


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 ??!?

von c-hater hater (Gast)


Lesenswert?

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

von Apollo M. (Firma: @home) (majortom)


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!

von Schlaumaier (Gast)


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. ;)

von Schlaumaier (Gast)


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.

von Stefan F. (Gast)


Lesenswert?

Schlaumaier schrieb:
> 8 Beiträge und nicht eine Antwort die den TO hilft.

Wieso? Seine Frage wurde von zwei Leuten klar beantwortet.

von Stefan F. (Gast)


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.

von Schlaumaier (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Man muss nicht für jeden Furz eine Library verwenden.

Aber die die drin ist habe ich übersehen.
#include <avr/sleep.h>  <- die da.

Ich muss wirklich mich mal mehr mit C-Codes rumärgern. ;) Ist echt nicht 
gut wenn man ein immer ein anders Programm die schreiben lässt. ;(

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
>>> Mein Beitrag hingegen könnte ihm u.U. weiterhelfen
>> Inwiefern?
> Darstellung der Eigenschaften des CTC-Mode...

Bei mir ist nur aggressives Kläffen angekommen.

von Stefan F. (Gast)


Lesenswert?

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

Danke nicht c-hater, sondern c-hater hater.

von Schlaumaier (Gast)


Lesenswert?

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.

von pnp (Gast)


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...

von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


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.

von Schlaumaier (Gast)


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.

von Stefan F. (Gast)


Lesenswert?

Dieter D. schrieb:
> Die Details von Dir danach hätte eigentlich der TO liefern
> muessen.

Warum, die waren doch für seine Frage irrelevant.

von HildeK (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.