Hilfsgesuch Arduino Leonardo und CUL_V3

Begonnen von naicheben, 29 März 2016, 18:54:10

Vorheriges Thema - Nächstes Thema

naicheben

Hallo,
ich bin Ingmar und lese seit ein paar Tagen hier im Forum. Ich habe Lust und Zeit CUL_v3 auf mein Arduino Leonardo zu bekommen, stoße aber an meine Grenzen was das Verständnis angeht.
Hier mal was ich bisher gemacht habe:
AVR-DFU Firmeware über avrdude mit Stange ISP-Programmer geflasht.
Culfw runtergeladen und in Devices/CUL CUL.c , prescaler auf 2, dann mit make clean, make und sudo make usbprogram_v3 den Leonardo geflasht. Dann meldet der sich aber immer noch als DFU Device. Resette ich ihn, oder starte mit sudo dfu-programmer start, bekomme ich nur unable to enumerate USB device.
Müsste der nicht unter Linux als /dev/ttyACMx oder zumindest /dev/ttyUSBx hochploppen?
Vielleicht habe ich mir auch bei meinen Experimenten die Fusebits vergurkt.
Hat einer von Euch das auf einem Arduino Leonardo laufen und kann mir da etwas unter die Arme greifen?

Danke fürs Lesen

juergs

#1
Schau mal hier: http://dokuwiki.ehajo.de/artikel:atmega_u-howto:go2bootloader

Dort steht:
Sollte man bereits ein Programm auf den Controller gespielt haben welches keine Möglichkeit bietet, den Boot-Reset-Vector anzuspringen kann man sich über den HWB-Pin helfen. Standardmäßig ist die Fuse HWBE programmiert, dies bedeutet, dass der Bootloader mit Hilfe von PD7/HWB aktiviert werden kann. Das gelingt durch folgende Schritte:

    PD7/HWB mit GND verbinden  (Anm.: und nach dem Reset wieder loslassen)
    einen Reset auslösen (RESET kurz mit GND verbinden)

Hier die "Leonardo ähnlichen"-FAQs:
https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/troubleshooting-and-faq

Soweit ich mich erinnere liegt PD7/HWB beim Leonardo dauernd auf GND. Ob das sich so mit der CUL-FW verträgt?
Hier http://www.busware.de/tiki-download_file.php?fileId=43, such dort mal nach dem Signal HWB ... und vergleiche mit hier:
http://forum.arduino.cc/index.php?action=dlattach;topic=108956.0;attach=20048 dort ist HWB dauerhaft mit GND über ein 10K Pulldown-R verbunden.

https://code.google.com/archive/p/micropendous/wikis/ProgramAndTestWindows.wiki
http://www.busware.de/tiki-index.php?page=DFU+Bootloader
http://dokuwiki.ehajo.de/bausaetze:display-adapter

Mit diesem Board funktioniert es: http://www.ehajo.de/boards/atmega32u4-breakout-board.html bei mir (mit DFU-Bootloader und CULFW) mit zwei Tastern an RESET und HWB.

Zugegebenermaßen bin ich über einen 8 MHz Quartz gegangen und habe den Prescaler gelassen.  :'(





naicheben

Hallo Juergs,
danke für die vielen Links. Ich kann zwar google, aber die hab ich nicht wirklich alle selbst gefunden.

Den HWB-Pin habe ich mir schon abgelötet und das klappt auch ganz gut mit dem dfu-bootloader. Wenn ich aber die CUL Firmware draufspiele und mit dfu-bootloader atmega32u4 start die culfw starten will, bekomme ich im syslog nur "unable to enumurate..."
Ich kann ja verstehen, dass der 16MHz Quarz das Timing durcheinander bringt, aber dafür habe ich ja in CUL.c das select_prescale_1 auf 2 hochgesetzt.
Nun werde ich mich erst noch mal auf Deine Links von ehajo stürzen und schauen, ob ich das Leonardoboard umgebaut bekomme. Soweit ich das Board überblicke, habe ich sowieso Probleme mit den 5V, bzw muss Levelshifter oder Widerstandsteiler basteln für den cc1101. Aber es soll ja auch eine Bastelherausforderung sein ;)

Vielen Dank noch mal und nur weiter so mit guten Tipps, bin für alles dankbar (auch gerne für original Fusebits vom CULV3- hab ich evtl auch vergurkt beim experimentieren)

juergs

#3
Hi, klar googlen kann jeder ...  8)

Du hattest auch nicht alle Infos angegeben ... und hellsehen, .... na ja, man strengt sich an ....   ;)

Es kommen auch nicht so viele Leute auf die Idee, den Leonardo als CUL zu verwenden, oder doch?

Bist Du sicher, dass das Setzen des Prescalers ausreicht?

Wie sieht es mit F_CPU im makefile aus?

F_CPU = 8000000
FORMAT = ihex
OBJDIR = .



naicheben

Ich habe mal gelesen an der F_CPU sollte man besser nicht drehen, da richtet sich fast alles nach. Ich experimentiere noch mal mit CKDIV8 aus und dem clock_prescale_set(2), eigentlich muss das die Lösung sein, evtl mit F_CPU zusammen.
Wenn ich F_CPU auf 16000000 mache zickt der Compiler. Aber wie ich gerade sehe nur für CUL_V4. Die Hex für den V3 baut er.
Den teste ich nachher mal.

Übrigens: das mit dem Hellsehen klappt bei Dir ja schon hervorragend ;) Den HWB-Pin habe ich zufällig beim Vergleichen der Schaltpläne vom CUL und Leonardo rausgefunden (nachdem ich hier die Frage rein gestellt hatte). Hatte direkt nach sowas gesucht, weil ich beim Lesen über den dfu-bootloader drüber gestolpert bin. Kaum lötet man den ab, kann man zwischen Bootloader und (nicht funktionierender) Firmware hin und her zappen.  8)


naicheben

#5
usb 2-2: ep 0x82 - rounding interval to 1024 microframes, ep desc says 2040 microframes
[246745.088061] cdc_acm 2-2:1.0: ttyACM0: USB ACM device
;D ;D ;D ;D

Vorher den dfu-bootloader von Atmelseite runterladen und auf den Atmega32u4 brennen (ich glaub Arduino baut da einen eigenen Bootloader rein, den hatte ich eh schon überschrieben)

Hier die Fuses:
avrdude: safemode: Fuses OK (H:C3, E:99, L:5E) (ich glaub der vertauscht da was....)
Im makefile F_CPU auf 16000000
In CUL.c clock_prescale_set(clock_div_2);

Und noch ein mal ein fettes Dankeschön, dass Du mich bestätigt hast da weiter zu machen.
Wie hast Du den CC1101 angebunden an Dein Board?

juergs

#6
Schau mal hier in den Thread:
und ff.
https://forum.fhem.de/index.php/topic,24651.msg419350.html#msg419350

Levelshifter mit 4K7/10K R's (SelbstbauCUL):
http://www.fhemwiki.de/wiki/Hauptseite

PS: das Ganze wäre auch für den Micro möglich, wenn man an HWB herankommt ....
Apropos googlen: https://forum.fhem.de/index.php/topic,45833.0.html

naicheben

Habe es soweit aufgebaut. MISO MOSI SCK geht über den ISP Port, aber SS bekomme ich nur an der RX-LED. Hab sie kurzerhand wieder abgelötet.
Der CUL ist in FHEM jetzt Initialized, kann aber noch nicht antworten. LED blinkt im Sekundentakt.(eine Sekunde an, eine Sekunde aus)
Fürs Erste nicht schlecht. Muss jetzt noch mal rausbekommen, warum ich nicht mit ihm sprechen kann.

juergs

#8
Die LED ist nicht am D13 (PC7), sondern ist über ein OP, der als Puffer fungiert, über ein 1K-Widerstand an die Led angeschlossen.
Am Pin 1 des IC2A das Signal and der VIA zum Widerstand-Netzwerk (102) durchtrennen (dort lässt sich IO13 dann gut abgreifen) 
D13 an der Leiste liegt parallel, deshalb dort (nicht an der LED!)  -> Levelshifter + Pullup von 10K (je nach Lage an 5V oder 3V3). Das Ganze dann an SS  (CS) des CC1101.
Dann sollte es gehen ... CCCONF und set CUL raw e schaden nicht....

naicheben

Ich dachte es geht um den PORTB (ISP-Bus) B0-B3 wobei die MISO MOSI uns SCK am ISP verbaut sind und SS als RXLED an B0 hängt.
#if defined(CUL_V3)      // not sure why libc is missing those ...
#  define PB0 PORTB0
#  define PB1 PORTB1
#  define PB2 PORTB2
#  define PB3 PORTB3
#  define PB6 PORTB6
#  define PD2 PORTD2
#  define PD3 PORTD3
#endif  // CUL_V3

#define SPI_PORT                PORTB
#define SPI_DDR                 DDRB
#define SPI_SS                  PB0
#define SPI_MISO                PB3
#define SPI_MOSI                PB2
#define SPI_SCLK                PB1

PC7 habe ich gar nicht benutzt. Der ist nur für CUL_V2 definiert:
#if defined(CUL_V2)
#  define CC1100_CS_DDR         DDRC
#  define CC1100_CS_PORT        PORTC
#  define CC1100_CS_PIN         PC5
#  define CC1100_IN_DDR         DDRC
#  define CC1100_IN_PORT        PINC
#  define CC1100_IN_PIN         PC7

juergs

#10
Sorry, hatte mich nur auf LED konzentriert und RX mit L getauscht:
Zitataber SS bekomme ich nur an der RX-LED

Aber wahrscheinlich hatte ich doch an eher an PC7 für SS gedacht, weil einfacher zu erreichen....

Letztendlich gilt natürlich die CUL-Konfiguration ... (und im Prinzip auch das von mir gesagte ...)
aber das kann man ja ändern.  8)

So ginge es z.B. auch:

  // CUL_V3
#define SPI_PORT PORTB
#define SPI_DDR DDRB
#define SPI_SS PB4   // ChipSelect CC1101 / LEO =>  #IO8 = D8  ( oder PB5 mit D9)
#define SPI_MISO PB3   // LEO: ICSP.1
#define SPI_MOSI PB2   // LEO: ICSP.4
#define SPI_SCLK PB1   // LEO: ICSP.3


und die Leonardo LED "L" umdefinieren:


#if defined(CUL_V3)
#  define CC1100_CS_DDR SPI_DDR
#  define CC1100_CS_PORT        SPI_PORT
#  define CC1100_CS_PIN SPI_SS
#  define CC1100_OUT_DDR        DDRD
#  define CC1100_OUT_PORT       PORTD
#  define CC1100_OUT_PIN        PD3    // LEO TX-PIN INT3
#  define CC1100_OUT_IN         PIND
#  define CC1100_IN_DDR DDRD
#  define CC1100_IN_PORT        PIND
#  define CC1100_IN_PIN         PD2     // Leo RX-PIN INT2
#  define CC1100_IN_IN          PIND
#  define CC1100_INT INT2
#  define CC1100_INTVECT        INT2_vect
#  define CC1100_ISC ISC20
#  define CC1100_EICR           EICRA
#  define LED_DDR               DDRC
#  define LED_PORT             PORTC
#  define LED_PIN               7              // LEO: LED "L" an PC7 (D13)
#endif


naicheben

#11
Jupp, so habe ich das verkabelt.
ccconf sagt:
myCul ccconf => freq:6182.103MHz bWidth:270KHz rAmpl:33dB sens:8dB

das finde ich schon etwas komisch.


CMDS
BbCFiAZNkGMKUYRTVWXefmLltux
Clients

:FS20:FHT.*:KS300:USF1000:BS:HMS: :CUL_EM:CUL_WS:CUL_FHTTK:CUL_HOERMANN: :ESA2000:CUL_IR:CUL_TX:Revolt:IT:UNIRoll:SOMFY: :STACKABLE_CC:CUL_RFR::CUL_TCM97001:CUL_REDIRECT:
DEF
/dev/ttyACM0@38400 0000
DeviceName /dev/ttyACM0@38400
FD 11
FHTID 1234
NAME myCul
NR 47
PARTIAL

STATE Initialized
TYPE CUL
VERSION V 1.66 CUL868
initString X21
Readings
ccconf freq:6182.103MHz bWidth:270KHz rAmpl:33dB sens:8dB

2016-04-04 19:07:11
cmds B b C F i A Z N k G M K U Y R T V W X e f m L l t u x

2016-04-04 19:06:18
raw
No answer


Auch über Telnet bekomme ich nichts angezeigt. Wie kann ich denn sicherstellen, dass der ATMEGA mit dem CC1101 "spricht"?

EDIT: schon gut, er spricht ja. Kann zumindest die Register aus dem CC1101 auslesen.  ;D
Danke für die Unterstützung!!!
Jetzt suche ich mir mal schöne Steckdosen aus.

juergs

#12
Ob die Readings auch die richtigen Inhalte wiedergeben?
Blinkt die Led "L"  im Sekundentakt?

Probier mal mit mycul set raw e den CUL zurückzusetzen.
Das initialisiert den EEprom-Inhalt auf Std-Werte, wenn danach keine
passenden Werte mit ccconf angezeigt werden, "spricht" der Leonardo nicht korrekt mit dem CC1101!

siehe auch hier: https://forum.fhem.de/index.php/topic,24651.msg419350.html#msg419350

Wenn Du einen 2. Arduino hast, zum Prüfen (ob alles ankommt, insbesondere SS mit PullUp!) :
Arduino als Logic Analyzer -> funktioniert recht gut bis 4 MHz !
http://physudo.blogspot.de/2013/08/arduino-als-logic-analyzer.html

naicheben

#13
Ich komme nicht weiter. Mit einem 433,92MHz Receiver sehe ich, dass der CUL sendet. Aber die Brennenstuhl will ums Verrecken nicht schalten. GDO0 und GDO2 habe ich auch mal getauscht=nix. set myCul raw e bringt mich in den Bootloader. Ich flashe also die Firmware neu, weil er nun nur noch in den Bootloader läuft. ccconf sieht immer noch komisch aus:
   
ccconf: freq:0.000MHz bWidth:812KHz rAmpl:24dB sens:4dB
cmds: B b C F i A Z N k G M K U Y R T V W X e f m L l t u x
credit10ms: 469
fhtbuf: No answer
raw: No answer
state: Initialized
uptime: 0 00:00:25
version: V 1.66 CUL433


Die LED blinkt im Sekundentakt (Logictester)

define initialUsbCheck notify global:INITIALIZED usb create
define myCul CUL /dev/ttyACM0@38400 1234
attr myCul rfmode SlowRF
attr myCul room Stube
attr myCul showtime 1
attr myCul verbose 5
define Schalter_ME_A IT 00000F0FFF FF F0
attr Schalter_ME_A IODev myCul
attr Schalter_ME_A ITrepetition 12
attr Schalter_ME_A model itswitch
attr Schalter_ME_A room Stube
define sz_Fensterleuchte_Ein IT 000000000F FF F0
attr sz_Fensterleuchte_Ein IODev myCul
attr sz_Fensterleuchte_Ein model itswitch
attr sz_Fensterleuchte_Ein room Stube
define BRENN_1 IT 00000F0FFF FF F0
attr BRENN_1 IODev myCul
attr BRENN_1 model itswitch
attr BRENN_1 room Stube


Was hat das mit den MARK_PIN_433 auf sich? Muss ich den auf LOW ziehen?8

EDIT: ich habe das jetzt auf dem lcd-adapter von ehajo laufen. Allerdings noch mit 16MHz. Ich bin mit meinem Latein am Ende. Pilight kann die Dosen schalten. Allerdings nicht mit dem CUL sondern Pilight_usb_nano

juergs

#14
Ok, dann müssen wir die Infos mal aufdröseln:
Du hast jetzt 2 Culs.
1. Leonardo
2. ehajo mit 16Mhz

Der 1. sendet noch und zeigt nicht richtige ccconf-Werte.
Der 2. sendet, schaltet aber nicht?
Ist Dein CC1101 ein 433 MHz-Version?

Beide mit 16 MHz.

Das erste: bei 433 : Das Attribut "slowrf" gilt für FS20 und nicht für IT ("langsame" Amplitudenmodulation und kein OOK).
Itrepetitions auf 12 zu setzen nützt auch nicht viel. Das Senden ist nur ewig lang weg.

Dein Problemlos wird ähnlich gelagert sein wie bei mir: die Module liegen u.U. frequenztechnisch neben dem
Frequenzfenster der Dosen.

Hierbei hilft: Schrittweise die itfrequeny um 5 kHz nach oben zu wandern, bis die Dosen reagieren. Bei mir musste ich die Itfrequeny z.B. auf 433.960 MHz einstellen, bis meine Pollin-IT-Dosen sicher reagieren. Vorausgesetzt alles andere ist Ok (Firmware + Anschaltung).
Die 08/15-433-Sendemodule sind wesentlich breitbandiger (sie müssen auch alle möglichen Empfänger erwischen ...)
als der CC1101! Deshalb muss dieser auch wesentlich genauer eingestellt werden.

Am WoE könnte ich das mal mit meinem Leonardo ausprobieren.
Wenn beim Leo mit dem EEPROM zurücksetzen wieder der BL aktiv ist, stimmt aber generell etwas mit dem Compile nicht.

Dein 433Empfänger liefert wirklich ein IT Muster und kein Spam? Bei einer falschen CC1101 Einstellung (z.B. GD0 +2 falsch)
sendet der CC1101 ggf. auch ... aber nur ein "blirp" ...

Es geht auch mittels GPIO ohne CUL mit C-Programm und 433-Sender:

#######################################################################
# siehe: matthias-biedert.de/2014/08/25
define Radio1 dummy
attr Radio1 room Arbeitszimmer
attr Radio1 setList on off
define off_Radio_1 notify Radio1:off {system("sudo /opt/fhem/send 11111 1 0&");;}
define on_Radio_1 notify Radio1:on {system('sudo /opt/fhem/send 11111 1 1&');;}
#-------------------------------------------------------------------------------


Hier als Beispiel meine IT Einstellungen (beachte die versch. Frequenzen für unterschiedliche Steckdosentypen!):

##################################################################################
#define <name> IT <housecode> <on-code> <off-code> [<dimup-code>] [<dimdown-code>]
#Define IT_000000FFFFF: wrong IT-Code format: specify a 10 digits 0/1/f statefile:
#------------------------------------
#..................1234567890.on.off
define POLLIN_A IT 000000FFFF 0F F0
attr POLLIN_A IODev NANOCUL
attr POLLIN_A ITfrequency 433.960
attr POLLIN_A model itswitch
attr POLLIN_A room POLLIN,IT
#------------------------------------
#..................1234567890.on.off
define Zimmer_A IT 000000FFFF 0F F0
attr Zimmer_A IODev NANOCUL
attr Zimmer_A ITfrequency 433.9284
attr Zimmer_A ITrepetition 3
attr Zimmer_A model itswitch
attr Zimmer_A room IT
#------------------------------------



IT-Infos:
http://avr.börke.de/Funksteckdosen.htm