Forum: Mikrocontroller und Digitale Elektronik IR Empfänger mit Attiny85/45 funktioniert nie


von Lukas G. (luke21)


Lesenswert?

Guten Abend,

ich plane mithilfe eines Attiny45/85 ein Relais über IR zu steuern.
Zum Einsatz kommt ein 38kHz Empfänger.
Zu Testzwecken habe ich auf einem Arduino Uno bereits ein paar Tests 
durchgeführt. Zum Einsatz kamen dabei die IRremote.h und tiny_IRremote.h 
Library, welche auch einwandfrei funktioniert.
Möchte ich dasselbe auf dem Attiny probieren, funktioniert garnichts 
mehr.
Ich hab dafür alle Methoden probiert, die im Internet standen, sprich 
verschieden Libraries für Attiny installiert, verschiedene 
Taktfrequenzen, verschiedene Pinbelegungen, verschiedene Spannungslevel 
usw.
Haupstächlich habe ich mich auf diese Tutorials konzentriert:
https://www.instructables.com/Attiny-IR-library/
https://www.instructables.com/Attiny-IR-library/

(Test-)Sketches habe ich u.A. folgende verwendet:
1
#include "IRremote.h"
2
3
int receiver = 0; // Signal Pin of IR receiver to Arduino Digital Pin 11
4
5
/*-----( Declare objects )-----*/
6
IRrecv irrecv(receiver);     // create instance of 'irrecv'
7
decode_results results;      // create instance of 'decode_results'
8
9
/*-----( Function )-----*/
10
void translateIR() // takes action based on IR code received
11
12
// describing Remote IR codes 
13
14
{
15
16
  switch(results.value)
17
18
  {
19
  case 0xFFA25D: digitalWrite(4,HIGH);
20
  break;
21
  case 0xFFE21D: digitalWrite(4,LOW);
22
  break;
23
24
  default: 
25
{
26
  
27
}
28
29
  }// End Case
30
31
  delay(500); // Do not get immediate repeat
32
33
34
} //END translateIR
35
void setup()   /*----( SETUP: RUNS ONCE )----*/
36
{
37
  pinMode(4,OUTPUT);
38
  pinMode(2,INPUT);
39
40
  irrecv.enableIRIn(); // Start the receiver
41
42
}/*--(end setup )---*/
43
44
45
void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
46
{
47
  if (irrecv.decode(&results)) // have we received an IR signal?
48
49
  {
50
    translateIR(); 
51
    irrecv.resume(); // receive the next value
52
  }  
53
}/* --(end main loop )-- */


Und
1
#include <IRremote.h>
2
3
int RECV_PIN = 0;
4
int led1 = 1;   
5
int led2 = 4;   
6
7
int state[] = {0,0,0};
8
9
#define code1 0xFFA25D  // Button 1 Code
10
#define code2 0xFFE21D  // Button 2 Code
11
12
13
IRrecv irrecv(RECV_PIN);
14
15
decode_results results;
16
17
void setup()
18
{
19
irrecv.enableIRIn(); 
20
pinMode(led1, OUTPUT);
21
pinMode(led2, OUTPUT);
22
23
}
24
25
void loop() {
26
if (irrecv.decode(&results)) {
27
unsigned int value = results.value;
28
switch(value) {
29
case code1:
30
if(state[1] == 1) {       // if first led is on then
31
digitalWrite(led1, LOW);  // turn it off when button is pressed
32
state[1] = 0;             // and set its state as off
33
} else {                  // else if first led is off
34
digitalWrite(led1, HIGH); // turn it on when the button is pressed
35
state[1] = 1;             // and set its state as on
36
}
37
break;
38
39
}
40
irrecv.resume(); 
41
}
42
}

Ich bin echt schon am verzweifeln und wäre so dankbar, wenn mir da 
jemand weiterhelfen könnte...
[ Weiß nicht ob das relevant ist aber beim IR-Pin messe ich (leider ohne 
Oszilloskop) bei VCC=5V ohne Signal 5V und bei anliegendem Signal ca 
4-4,7V ]

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Lukas G. schrieb:
> int receiver = 0; // Signal Pin of IR receiver to Arduino Digital Pin 11

Ich bin sicher kein Arduino Spezi, aber war das nicht so, das die Ports 
für PortA von 0-7 gingen? Da der Tiny nur PortB hat, könnte für PB0 also 
eine andere (wie z.B. 8) Zahl stehen.

Aber wie dem auch sei, du suchst sicher IRMP:
https://www.mikrocontroller.net/articles/IRMP
IRMP ist eine robuste Lösung, um alle möglichen IR Fernbedienungen zu 
empfangen. Das Gegenstück heisst IRSND und ist genauso zuverlässig.
Um Platz zu sparen, kompilierst du nur das Protokoll, das du brauchst.
Ausserdem läuft es bestens auf einem Tiny45/85, wie ich dir aus eigener 
Erfahrung sagen kann.

von Wolfgang (Gast)


Lesenswert?

Lukas G. schrieb:
> [ Weiß nicht ob das relevant ist aber beim IR-Pin messe ich (leider ohne
> Oszilloskop) bei VCC=5V ohne Signal 5V und bei anliegendem Signal ca
> 4-4,7V ]

Das Multimeter misst einen Mittelwert, d.h. das Absinken der Spannung 
bei anliegendem Signal verrät dir wahrscheinlich, dass das Signal 
zeitweise auf L-Pegel liegt.
Für Probleme rein digitaler Natur brauchst du nicht unbedingt ein Oszi. 
Ein Logikanalysator kann gerade bei Datenübertragung und Timingfrage 
fast noch besser helfen. Mit den kleinen 8-Kanal LA für unter 10..15 € 
kommt man oft recht weit.

von Lukas G. (luke21)


Angehängte Dateien:

Lesenswert?

Attiny hat PB ja, aber ich habs jetzt eh überall schon getestet.
Wie hast du das denn zum Laufen gebracht?

von Kuno (Gast)


Lesenswert?

Bei so einem Tiny 25..85 halte ich C für Overkill, aber das ist nur 
meine MEINUNG.
Du benutzt eine IR-Library, der man doch bestimmt mitteilen muss,
wo das IR-Signal reinkommt wie die IR-Codes aussehen.

Diese Zeilen könnten dem Compiler sagen, was IN, was OUT sein soll,
obwohl es mich wundert, woher der Compiler wissen soll, ob PortA, PortB, 
oder PortC gemeint sind.
>>  pinMode(4,OUTPUT);   Relais???
>>  pinMode(2,INPUT);    IR-Receiver???
aber weiß das damit auch deine IR-Library??

>> case 0xFFA25D: digitalWrite(4,HIGH);
Soll das die Relais-Ausgabe sein?
Woher kennst du ohne Oszi den IR-Code?

Fang doch mal damit an, der IR-Library den Anschluss des IR-Receivers
mitzuteilen - und lass eine LED z.B. an PortB-0 aufleuchten, wenn grad 
was empfangen wurde.

von Lukas G. (luke21)


Lesenswert?

Kuno schrieb:
> aber weiß das damit auch deine IR-Library??

Muss sie wissen, sonst würde es am UNO auch nicht funktionieren

Kuno schrieb:
> Woher kennst du ohne Oszi den IR-Code?

Gibt ja diverse NEC Decoder Sketches, die mir dann den HEX Code 
rausspucken

von Lukas G. (luke21)


Lesenswert?

Ich hab mir jetzt die IRMP-Library angeschaut mit dem darin enthaltenen 
Beispielsketch 'MinimalReceiver' der ja speziell für Attinys geeignet zu 
sein scheint.
Ich versteh jetzt nicht ganz wie ich damit umgehen soll. In Zeile 72 
kann ich ja meinen eigenen Code einfügen. Aber was soll der jetzt alles 
beinhalten wenn ich als Beispielcode den erstangeführten Sketch in der 
Fragestellung hernehme?
1
 /*
2
 *  MinimalReceiver.cpp
3
 *
4
 *  Small memory footprint and no timer usage!
5
 *
6
 *  Receives IR protocol data of NEC protocol using pin change interrupts.
7
 *  On complete received IR command the function handleReceivedIRData(uint16_t aAddress, uint8_t aCommand, bool isRepetition)
8
 *  is called in Interrupt context but with interrupts being enabled to enable use of delay() etc.
9
 *  !!!!!!!!!!!!!!!!!!!!!!
10
 *  Functions called in interrupt context should be running as short as possible,
11
 *  so if you require longer action, save the data (address + command) and handle it in the main loop.
12
 *  !!!!!!!!!!!!!!!!!!!!!
13
 *
14
 *
15
 *  Copyright (C) 2020-2021  Armin Joachimsmeyer
16
 *  armin.joachimsmeyer@gmail.com
17
 *
18
 *  This file is part of IRMP https://github.com/ukw100/IRMP.
19
 *  This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote.
20
 *
21
 *  IRMP is free software: you can redistribute it and/or modify
22
 *  it under the terms of the GNU General Public License as published by
23
 *  the Free Software Foundation, either version 3 of the License, or
24
 *  (at your option) any later version.
25
 *
26
 *  This program is distributed in the hope that it will be useful,
27
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
28
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
29
 *  GNU General Public License for more details.
30
 *
31
 *  You should have received a copy of the GNU General Public License
32
 *  along with this program.  If not, see <http://www.gnu.org/licenses/gpl.html>.
33
 *
34
 */
35
36
#include <Arduino.h>
37
38
/*
39
 * Set sensible receive pin for different CPU's
40
 */
41
#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__)
42
#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut"
43
#  if defined(ARDUINO_AVR_DIGISPARKPRO)
44
#define IR_INPUT_PIN    9 // PA3 - on Digispark board labeled as pin 9
45
#  else
46
#define IR_INPUT_PIN    0 // PCINT0
47
#  endif
48
49
#elif defined(__AVR_ATtiny1616__)  || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__)
50
#define IR_INPUT_PIN    10
51
52
#else
53
#define IR_INPUT_PIN    2
54
//#define DO_NOT_USE_FEEDBACK_LED // activating saves 12 bytes
55
#endif
56
57
/*
58
 * Second: include the code and compile it.
59
 */
60
#include "TinyIRReceiver.hpp"
61
62
/*
63
 * Helper macro for getting a macro definition as string
64
 */
65
#define STR_HELPER(x) #x
66
#define STR(x) STR_HELPER(x)
67
68
void setup() {
69
70
}
71
72
void loop() {
73
74
75
76
  
77
   
78
}
79
80
/*
81
 * This is the function is called if a complete command was received
82
 */
83
#if defined(ESP8266)
84
void ICACHE_RAM_ATTR handleReceivedTinyIRData(uint16_t aAddress, uint8_t aCommand, bool isRepeat)
85
#elif defined(ESP32)
86
void IRAM_ATTR handleReceivedTinyIRData(uint16_t aAddress, uint8_t aCommand, bool isRepeat)
87
#else
88
void handleReceivedTinyIRData(uint16_t aAddress, uint8_t aCommand, bool isRepeat)
89
#endif
90
{
91
    /*
92
     * Print only very short output, since we are in an interrupt context and do not want to miss the next interrupts of the repeats coming soon
93
     */
94
    Serial.print(F("A=0x"));
95
    Serial.print(aAddress, HEX);
96
    Serial.print(F(" C=0x"));
97
    Serial.print(aCommand, HEX);
98
    Serial.print(F(" R="));
99
    Serial.print(isRepeat);
100
    Serial.println();
101
}

von Armin J. (arminj)


Lesenswert?

1. Nimm die standard IRremote library und nicht irgendwelche 
abgehangenen Zips aus dubiosen Quellen.
2. Im IRMP Beispiel schalte dein Relay einfach da, wo jetzt die serielle 
Ausgabe steht Zeile 94 ff. und fertig. Und der Loop langweilt sich eben!

von Lukas G. (luke21)


Lesenswert?

So jetzt hab ich den SimpleReceiver Sketch von IRMP genommen, die 
Definitionen für die anderen Boards rausgenommen und zuerst über den UNO 
probiert, da hats funktioniert, dann hab ich den exakt gleichen Code auf 
den Attiny geladen, mit den richtigen Pinbelegungen und es funktioniert 
wieder nicht...
Hier mal der Code:
1
#include <Arduino.h>
2
3
4
#include "PinDefinitionsAndMore.h"
5
#include <irmpSelectMain15Protocols.h>  // This enables 15 main protocols
6
#include <irmp.hpp>
7
8
IRMP_DATA irmp_data;
9
int state[] = {0,0};
10
11
void setup() {
12
13
    pinMode(TONE_PIN ,OUTPUT);
14
    irmp_init();
15
}
16
17
void loop() {
18
 
19
    if (irmp_get_data(&irmp_data)) {
20
        
21
        if (!(irmp_data.flags & IRMP_FLAG_REPETITION)) {
22
23
            switch (irmp_data.command) {          
24
25
            case 0xFD02:
26
            if(state[1] == 1) {
27
            digitalWrite(TONE_PIN , LOW); 
28
            state[1] = 0;            
29
            } else {                 
30
            digitalWrite(TONE_PIN , HIGH); 
31
            state[1] = 1;             
32
            }
33
            break;
34
                   
35
            default:
36
            {}
37
            }
38
        }
39
        irmp_result_print(&irmp_data);
40
    }
41
}

PinDefinitionsAndMore.h:
1
 
2
#if  defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
3
#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut"
4
#define IRMP_INPUT_PIN   2
5
#define TONE_PIN         4
6
7
#else
8
#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h.
9
#define IRMP_INPUT_PIN      2
10
#define TONE_PIN            4
11
#endif // defined(ESP8266)
12
13
14
#if defined(__AVR_ATmega4809__) // for standard AVR we manage hardware directly in void enablePCIInterrupt()
15
#define IRMP_USE_ARDUINO_ATTACH_INTERRUPT
16
#endif
17
18
#define STR_HELPER(x) #x
19
#define STR(x) STR_HELPER(x)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Wie ich oben schon mal sagte, liegt es mit Sicherheit an den Nummern, 
die Arduino statt anständiger Portbezeichnungen benutzt. Wie z.B. kommt 
man darauf, das Nummer 11 der Port A3 sein soll?
Der Tiny hat nur PortB 0 - 4 (5 nicht benutzen) und darauf muss man die 
Software einstellen. Normalerweise macht man das in der irmpconfig.h, 
aber bei dem Arduino Kram kann ich es dir nicht sagen. Finde das heraus 
und alles wird spielen. Lass dir am besten seriell auch mal die Adresse 
deiner Fernbedienung sagen.

von Stefan F. (Gast)


Lesenswert?

Matthias S. schrieb:
> Wie z.B. kommt man darauf, das Nummer 11 der Port A3 sein soll?

Das steht in einer Header Datei vom verwendete Arduino Core. Zum 
Beispiel: 
https://github.com/SpenceKonde/ATTinyCore/blob/master/avr/variants/tinyX5/pins_arduino.h

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Lukas G. schrieb:
> die
> Definitionen für die anderen Boards rausgenommen und zuerst über den UNO
> probiert, da hats funktioniert, dann hab ich den exakt gleichen Code auf
> den Attiny geladen

Rausnehmen ist normalerweise nicht nötig, denn das erkennt IRMP von 
alleine. Für den Tiny45/85 wird bei IRMP Timer 1 benutzt, aber der ist, 
soweit ich weiss beim Arduino Zeug mit dem millis() besetzt. Das wird 
IRMP für Arduino aber wissen. Lass also die Defintionen drin, damit IRMP 
das Setup hinbekommt.

Stefan ⛄ F. schrieb:
> Das steht in einer Header Datei vom verwendete Arduino Core.

Schönen Dank auch. So eine Hürde hätte ich ja nicht erwartet. Was soll 
das wohl?
Denke bitte dran, den Tiny auf 8Mhz zu fusen, also die CKDIV/8 Fuse zu 
löschen. Der IRQ für IRMP feuert pro Sekunde 15000 mal, profitiert also 
von den 8MHz Tiny Takt.

von Lukas G. (luke21)


Lesenswert?

Matthias S. schrieb:
> Normalerweise macht man das in der irmpconfig.h

Hab das jetzt gemacht:
1
 #if defined (ATMEL_AVR) || defined (__AVR_XMEGA__)                      // use PB6 as IR input on AVR
2
#  define IRMP_PORT_LETTER                      PB4
3
#  define IRMP_BIT_NUMBER                       6

Und Takt 8MHz eingestellt, hat wieder nichts gebracht

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Lukas G. schrieb:
> #  define IRMP_PORT_LETTER                      PB4
> #  define IRMP_BIT_NUMBER                       6

Du bist ja ein Spassvogel. Als Port Letter sollte da nur ein B stehen 
und Port B6 gibt es beim Tiny gar nicht, denn der hat nur Port B0 bis 
PortB4 (PortB5 ist der Reset pin und ein Sonderfall.
Stell das mal auf die richtigen Sachen um - also z.B. auf 
IRMP_BIT_NUMBER 4.

: Bearbeitet durch User
von Gerald B. (gerald_b)


Lesenswert?

Hast du den Tiny richtig gefused und nicht bloß dein Compilat da 
reingespielt? Die Fuse für den berüchtigten 1:8 Teiler gibts auch beim 
Tiny. Wenn der auf Werkseinstellung mit 1 statt 8 MHz läuft, 
funktionieren deine Timings für IR nicht.

von Stefan F. (Gast)


Lesenswert?

Matthias S. schrieb:
> So eine Hürde hätte ich ja nicht erwartet. Was soll
> das wohl?

Das ist keine Hürde, sondern gibt dem Hersteller eines Boardes die 
Möglichkeit, die externen Pins fortlaufend durch zu nummerieren. Das ist 
halt Arduino Standard.

von Schlaumaier (Gast)


Lesenswert?

Hab ich schon erwähnt das ich Libs hasse, die den Port in der Lib selbst 
haben, und nicht in der INI bzw. den Aufruf.

Würde so nebenbei die Libs besser und den Code viel kürzer machen.

von Lukas G. (luke21)


Angehängte Dateien:

Lesenswert?

Gerald B. schrieb:
> Hast du den Tiny richtig gefused und nicht bloß dein Compilat da
> reingespielt?

Reicht es aus, in der Arduino IDE die Clockspeed auf 8MHz zu setzen oder 
muss man da wieder irgendwo was separat umstellen?

von Gerald B. (gerald_b)


Lesenswert?

Diese Einstellung der Arduino IDE ist mir neu, ich habe das über eXtreme 
Burner und einen USBasp gemacht. eXtrme Burner ist wie ein Hex Editor 
aufgebaut und hat einen Reiter für Flash, einen fürs EEPROM und einen 
für die Fuses.
Keine Ahnung, wie man in der IDE die dort eingestellten Werte überträgt. 
Versuch's man mit dem Button "Burn Bootloader". Bei den Megas werden ja 
neben dem Bootloader so auch die Fuses gesetzt.

von Stefan F. (Gast)


Lesenswert?

Lukas G. schrieb:
> Reicht es aus, in der Arduino IDE die Clockspeed auf 8MHz zu setzen oder
> muss man da wieder irgendwo was separat umstellen?

Nein, dort musst du einstellen, mit welcher Frequenz dein 
Mikrocontroller wirklich getaktet wird. Es verändert aber nicht dessen 
Taktfrequenz.

von Schlaumaier (Gast)


Lesenswert?

Ich habe bei der IDE mit diverses Chips bei 8 Mhz Einstellung Probleme.
Wenn ich den auf 1 mhz stelle rennt der wie eine 1.

@To

Lade dir die Atiny-85 Libs nach. Stelle dann deinen Chip ein, Stelle 
danach dein USBasp als Programmierer ein.

Klicke danach im Menü auf "Hochladen mit Progammer" NICHT Hochladen 
anklicken !!!

Dann sollte das Prg. problemlos auf die Atiny's geladen werden.

Jedenfalls mache ich das so.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Schlaumaier schrieb:
> Ich habe bei der IDE mit diverses Chips bei 8 Mhz Einstellung Probleme.
> Wenn ich den auf 1 mhz stelle rennt der wie eine 1.

und quatscht mal wieder gerührten Blödsinn. Ein Uno läuft sogar mit 
16MHz und kann auch aus der IDE programmiert werden.

von Schlaumaier (Gast)


Lesenswert?

Matthias S. schrieb:
> und quatscht mal wieder gerührten Blödsinn. Ein Uno läuft sogar mit
> 16MHz und kann auch aus der IDE programmiert werden.

Ich habe außer Blinki NIE was auf einen UNO aufgespielt.

Meine Lieblinge sind Nanos-Clones aus China für ca. 1.50 Euro das Stück 
mit gelötete Pin-Leisten. Und bei den habe ich halt das Problem.

Da die Hektik aber mehr Strom frisst, reicht mir 1 Mhz völlig aus. Wenn 
man ergo Probleme hat mit den Teil dann einfach mal ein Gang runter 
schalten.

Und damit das auch klar ist. Die Problem fangen schon beim Hochladen an. 
Die IDE bricht nämlich mit einen Fehler ab wenn ich meine Nanos mit 8 
MHZ Einstellung füttere. Bei 1 MHZ klappt das alles prima.

Und das sind Erfahrungswerte. Keine Theoretischer Mist, von "kann er , 
sollte klappen".

Und da ich mit den Nanos keine Bitcoins schürfe, bin ich so zufrieden.

von Stefan F. (Gast)


Lesenswert?

Schlaumaier schrieb:
> Und damit das auch klar ist. Die Problem fangen schon beim Hochladen an.
> Die IDE bricht nämlich mit einen Fehler ab wenn ich meine Nanos mit 8
> MHZ Einstellung füttere. Bei 1 MHZ klappt das alles prima.

Irgendwas läuft da bei dir grob falsch. Ich hatte das Problem noch nie 
und ich wüsste auch nicht, welche Probleme dabei auftreten könnten, 
außer zu lange Kabel.

20cm sind üblich, 30cm sind aber noch OK.

von Joachim B. (jar)


Lesenswert?

Stefan ⛄ F. schrieb:
> ich wüsste auch nicht, welche Probleme dabei auftreten könnten,
> außer zu lange Kabel.

auch Wusb oder USB/Ethernet Server ohne langes Kabel können Probleme 
machen
Ich musste alle meine nano mit einem modifizierten Optiboot 
programmieren, 115k schaffen alle nicht mit den genannten Verbindungen, 
da muss das Kabel nicht mal lang sein!

38.4/57.6 k war OK

: Bearbeitet durch User
von EAF (Gast)


Lesenswert?

Gerald B. schrieb:
> Versuch's man mit dem Button "Burn Bootloader". Bei den Megas werden ja
> neben dem Bootloader so auch die Fuses gesetzt.

Richtig!
So geht es.

von EAF (Gast)


Lesenswert?

Joachim B. schrieb:
> Ich musste alle meine nano mit einem modifizierten Optiboot
> programmieren, 115k schaffen alle nicht mit den genannten Verbindungen,
> da muss das Kabel nicht mal lang sein!
Irrational!

Was hat die Baudrate mit der Länge des USB Kabels zu tun?
Antwort: Nichts!

von Stefan F. (Gast)


Lesenswert?

Bitte aufwachen! Es geht um die Taktfrequenz des AVR und sein ISP 
Interface.

von EAF (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Bitte aufwachen! Es geht um die Taktfrequenz des AVR und sein ISP
> Interface.

Je selbstsicherer du tust, desto weniger hast du kapiert.

von Schlaumaier (Gast)


Lesenswert?

Re: IR Empfänger mit Attiny85/45 funktioniert nie
von Lukas G. (luke21)   13.12.2021 17:05
Angehängte Dateien:
    preview image for Screenshot__1_.png


Es geht um die Einstellung auf diesen Foto.  !!!!

DA muss ich immer 1 MHZ einstellen.

Da der serial-Monitor langsam seien soll, habe ich den IM CODE auf 
19.200 eingestellt. Dann kann ich i.d.R. locker mitlesen.

Was die Kabellänge angeht. Es ist ein gutes Kabel und ca. 1 m lang. 
Stromversorgung durch eine externe aktiven HUB.

von W.S. (Gast)


Lesenswert?

Lukas G. schrieb:
> Ich hab dafür alle Methoden probiert, die im Internet standen, sprich
> verschieden Libraries für Attiny installiert, verschiedene
> Taktfrequenzen, verschiedene Pinbelegungen, verschiedene Spannungslevel
> usw.

Dies ist mal wieder ein Beitrag, bei dem mir recht unfreundlich zumute 
wird. Anstatt ein wenig zu lesen, dann zu verstehen, wie das IR-Zeugs 
funktioniert und dann sein eigenes Zeugs zu konstruieren, wird hier 
jegliche Sachkenntnis peinlichst vermieden und stattdessen "alle 
Methoden, die im Internet standen" durchprobiert.

Tja, dir kann ich nur sagen, daß du zu allererst versuchen solltest, ein 
Pin deines µC so als Eingang zu konfiurieren, daß du es vom Programm her 
abfragen kannst und obendrein einen Interrupt auf beide Flanken 
bekommst. Dann überlege dir irgend ein sinnvolles Kommandosystem oder 
benutze eines der bekannten Systeme wie das von Philips, NEC oder so und 
schreibe danach deine ISR selber. So wie ich das sehe, benötigst du dazu 
noch einen Timer, mit dem du die Zeit seit dem letzten Zustandswechsel 
deines Empfangssignales messen kannst.

Wenn du das hingekriegt hast, können wir weiter sehen.

W.S.

von Schlaumaier (Gast)


Lesenswert?

Kleiner Hinweis am Rande :;)

Ich habe mal wegen einer IR-Diode (Sender) 3 Std. nach den Fehler 
gesucht.
Bis ich festgestellt habe, das die Chinesen die Diode falsch auf die 
Mini-Platinchen gelötet haben und die Pin-Beschriftung nicht mit den 
Beinchen der Diode übereinstimmte.

Da ich sowas immer im 10er Pack bestellt habe, habe ich ne andere Diode 
angeschlossen (vorher geprüft) und die funktionierte 1a. Nach weiterer 
Prüfung habe ich festgestellt das von den 10er Pack 3 falsch angelötet 
waren.

Also es wäre keine schlechte Idee sich mal das Datenblatt der Diode 
anzusehen. Egal ob Sender o. Empfänger ;)

Ach und halte mal dein Handy an die Diode wenn sie SENDEN soll. Dann 
muss da ein roter flackernder Punkt zu sehen sein. !!  Wenn du den Punkt 
siehst, aber nix passiert dann sendest du den falschen Code.

Dann lädst du einfach ein fertiges Prg. IR-Erkennungsprogramm in den 
Chip. Baust die passende EMPFÄNGER-Diode (38 k in den Fall) dran (selber 
PIN) und löst die ECHTE Fernbedienung aus. Dann bekommst du MEIST das 
Protokoll + richtigen Code angezeigt.

Viel Glück.

von Joachim B. (jar)


Lesenswert?

EAF schrieb:
> Was hat die Baudrate mit der Länge des USB Kabels zu tun?
> Antwort: Nichts!

du verstehst es nicht, kein Problem.

Baudrate <-> Takt <-> Bootloadereinstellung (Optiboot) <-> Wusb steht 
alles in einer Beziehung

Das darfst du gerne bestreiten!

von EAF (Gast)


Lesenswert?

Joachim B. schrieb:
> viel Unsinn

Das Problem des TO hat nicht mit
1. Bootloader
2. WUSB
3. Kabellängen
4. Baudrate
5. Nanos
zu tun.

Da bleibt dann die Frage "Wer?" hier irgendwas nicht versteht schon gar 
nicht mehr offen.

Oder willst du diesen Thread auch wieder mit deinem Sermon kapern?



Lukas G. schrieb:
> Reicht es aus, in der Arduino IDE die Clockspeed auf 8MHz zu setzen oder
> muss man da wieder irgendwo was separat umstellen?
Den Clock Prescaler kann man im Programm umstellen.
Also per Fuse, oder im Programm.

von Joachim B. (jar)


Lesenswert?

EAF schrieb:
> Das Problem des TO hat nicht mit

habe ich auch nicht behauptet, nur das dir Leseverständnis fehlt!

Stefan ⛄ F. schrieb:
> ich wüsste auch nicht, welche Probleme dabei auftreten könnten,
> außer zu lange Kabel.

selbst mit kurzen Kabeln kann es Probleme geben, was ich beweisen kann!

Diskutiere nie mit ........

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.