Forum: Mikrocontroller und Digitale Elektronik Frage zu Attiny-Programm


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tom (Gast)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
-2 lesenswert
nicht 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. (stefanus)


Bewertung
-1 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht lesenswert
Nee, dafür brauchen wir beim Arduino den c++-hater.

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von Stefan ⛄ F. (stefanus)


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

Inwiefern?

von pnp (Gast)


Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb im Beitrag #6475561:
> Flachwichser

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

von Schlaumaier (Gast)


Bewertung
-2 lesenswert
nicht 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. (Firma: Thomas Eckmann Informationst.) (thomase)


Bewertung
2 lesenswert
nicht lesenswert
pnp schrieb:
> Der "Hasser" ist mal wieder in Hochform...

Ach was. Seine Domina ist im Corona-Lockdown.

von c-hater (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht lesenswert
>Dein Code ist Mist.
@Schlaumaier

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

von Schlaumaier (Gast)


Bewertung
-2 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-3 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
-2 lesenswert
nicht 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. (stefanus)


Bewertung
1 lesenswert
nicht 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. (stefanus)


Bewertung
1 lesenswert
nicht 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.

: Bearbeitet durch User
von Schlaumaier (Gast)


Bewertung
-1 lesenswert
nicht 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. (stefanus)


Bewertung
3 lesenswert
nicht 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. (stefanus)


Bewertung
1 lesenswert
nicht 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)


Bewertung
-3 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.